基本思路

  • 使用Qt的控件Table绘制表格
  • 使用Qt提供的类QChart绘制曲线、饼状、条形图等

    统计表格

  • 示例程序 ```cpp void Form_pointState::buildTable(QVector vecPoint) { //设置表格单元格不可编辑 ui->tb_pointState->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置表格行数 ui->tb_pointState->setRowCount(vecPoint.size()); //设置表格列数 ui->tb_pointState->setColumnCount(2); //设置表格列表头 ui->tb_pointState->setHorizontalHeaderLabels(QStringList()<<”表头1”<<”表头2”); //填入单元格内容 for (int i=0;itb_pointState->rowCount();i++) {

    1. //填入内容
    2. ui->tb_pointState->setItem(i,0,new QTableWidgetItem(QString::number(vecPoint[i]->mem1)));
    3. //设置单元格内容居中
    4. ui->tb_pointState->item(i,0)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
    5. ui->tb_pointState->setItem(i,1,new QTableWidgetItem(vecPoint[i]->mem2));
    6. ui->tb_pointState->item(i,1)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);

    }

}

  1. - 注:
  2. - 在该实例中`vecPoint`为一结构体向量,即数据的组织形式类似于表格
  3. - `setTextAlignment`方法填入单元格须为字符串形式,如果传入为数字,需要使用`QString::number`方法转换
  4. <a name="uK0pX"></a>
  5. # 柱状图
  6. - 示例程序
  7. - `.pro`文件中添加内容
  8. ```cpp
  9. QT += core gui charts
  • 在ui界面设计器添加控件 QWidget, 并提升为 QChart

    1. //传入参数为表中所需数据
    2. //每行为项目,每列为类别,数据以空格隔开
    3. QString Form_linkstate::buildTable(QString fileName)
    4. {
    5. QString info = "";
    6. // put the date from file to vector
    7. // struct performance 为有着三个成员变量的结构体
    8. QString tempStr;
    9. QStringList tempStrList;
    10. struct performance tempPerformance;
    11. QFile aFile(fileName);
    12. QTextStream aStream(&aFile);
    13. if(!aFile.open(QIODevice::ReadOnly | QIODevice::Text))
    14. return "文件"+fileName+"不存在";
    15. while(!aStream.atEnd())
    16. {
    17. tempStr = aStream.readLine();
    18. tempStrList = tempStr.split(" ");
    19. tempPerformance.mem1 = tempStrList[0].toDouble();
    20. tempPerformance.mem2 = tempStrList[1].toDouble();
    21. tempPerformance.mem3 = tempStrList[2].toDouble();
    22. vecPerformance.append(tempPerformance);
    23. }
    24. aFile.close();
    25. // find the max value of vector
    26. // 查找表中的最大值,美化后面的绘图部分
    27. double MaxValue = 0.0;
    28. for (int i=0;i<vecPerformance.size();i++) {
    29. if(vecPerformance[i].mem1 > MaxValue)
    30. MaxValue = vecPerformance[i].mem1;
    31. if(vecPerformance[i].mem2 > MaxValue)
    32. MaxValue = vecPerformance[i].mem2;
    33. if(vecPerformance[i].mem3 > MaxValue)
    34. MaxValue = vecPerformance[i].mem3;
    35. }
    36. // paint the table
    37. QChart* chart = new QChart();
    38. QBarSet *set0 = new QBarSet("类别1");
    39. QBarSet *set1 = new QBarSet("类别2");
    40. QBarSet *set2 = new QBarSet("类别3");
    41. for (int i=0;i<vecPerformance.size();i++) {
    42. *set0 << vecPerformance[i].mem1;
    43. *set1 << vecPerformance[i].mem2;
    44. *set2 << vecPerformance[i].mem3;
    45. }
    46. set0->setLabelColor(QColor(0,0,255));
    47. set1->setLabelColor(QColor(0,0,255));
    48. set2->setLabelColor(QColor(0,0,255));
    49. QBarSeries *series = new QBarSeries();
    50. series->append(set0);
    51. series->append(set1);
    52. series->append(set2);
    53. series->setVisible(true);
    54. series->setLabelsVisible(true);
    55. series->setLabelsPosition(QAbstractBarSeries::LabelsOutsideEnd);
    56. chart->addSeries(series);//添加系列到QChart上
    57. chart->setTheme(QChart::ChartThemeLight);//设置白色主题
    58. QBarCategoryAxis *axisX = new QBarCategoryAxis;
    59. for (int i=0;i<vecPerformance.size();i++) {
    60. axisX->append("项目"+QString::number(i));
    61. }
    62. axisX->setLabelsColor(QColor(7,28,96));
    63. chart->addAxis(axisX, Qt::AlignBottom);
    64. series->attachAxis(axisX);
    65. QValueAxis *axisY = new QValueAxis;
    66. axisY->setRange(0,MaxValue+0.02);
    67. chart->addAxis(axisY, Qt::AlignLeft);
    68. series->attachAxis(axisY);
    69. axisY->setTitleText("指标");
    70. chart->legend()->setVisible(true);
    71. chart->legend()->setAlignment(Qt::AlignBottom);//底部对齐
    72. chart->legend()->setBackgroundVisible(true);//设置背景是否可视
    73. chart->legend()->setAutoFillBackground(true);//设置背景自动填充
    74. chart->legend()->setColor(QColor(222,233,251));//设置颜色
    75. chart->legend()->setLabelColor(QColor(0,100,255));//设置标签颜色
    76. chart->legend()->setMaximumHeight(50);
    77. ui->widget->setChart(chart);
    78. return info;
    79. }

    参考内容

    QT-QChart之曲线图,饼状图,条形图使用 https://www.cnblogs.com/lifexy/p/10985191.html QTCharts入门 使用QChartView做折线图 https://blog.csdn.net/baizy77/article/details/84107786