基本思路
- 使用Qt的控件Table绘制表格
-
统计表格
示例程序 ```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;i tb_pointState->rowCount();i++) { //填入内容ui->tb_pointState->setItem(i,0,new QTableWidgetItem(QString::number(vecPoint[i]->mem1)));//设置单元格内容居中ui->tb_pointState->item(i,0)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);ui->tb_pointState->setItem(i,1,new QTableWidgetItem(vecPoint[i]->mem2));ui->tb_pointState->item(i,1)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
}
}
- 注:- 在该实例中`vecPoint`为一结构体向量,即数据的组织形式类似于表格- `setTextAlignment`方法填入单元格须为字符串形式,如果传入为数字,需要使用`QString::number`方法转换<a name="uK0pX"></a># 柱状图- 示例程序- 在`.pro`文件中添加内容```cppQT += core gui charts
在ui界面设计器添加控件 QWidget, 并提升为 QChart
//传入参数为表中所需数据//每行为项目,每列为类别,数据以空格隔开QString Form_linkstate::buildTable(QString fileName){QString info = "";// put the date from file to vector// struct performance 为有着三个成员变量的结构体QString tempStr;QStringList tempStrList;struct performance tempPerformance;QFile aFile(fileName);QTextStream aStream(&aFile);if(!aFile.open(QIODevice::ReadOnly | QIODevice::Text))return "文件"+fileName+"不存在";while(!aStream.atEnd()){tempStr = aStream.readLine();tempStrList = tempStr.split(" ");tempPerformance.mem1 = tempStrList[0].toDouble();tempPerformance.mem2 = tempStrList[1].toDouble();tempPerformance.mem3 = tempStrList[2].toDouble();vecPerformance.append(tempPerformance);}aFile.close();// find the max value of vector// 查找表中的最大值,美化后面的绘图部分double MaxValue = 0.0;for (int i=0;i<vecPerformance.size();i++) {if(vecPerformance[i].mem1 > MaxValue)MaxValue = vecPerformance[i].mem1;if(vecPerformance[i].mem2 > MaxValue)MaxValue = vecPerformance[i].mem2;if(vecPerformance[i].mem3 > MaxValue)MaxValue = vecPerformance[i].mem3;}// paint the tableQChart* chart = new QChart();QBarSet *set0 = new QBarSet("类别1");QBarSet *set1 = new QBarSet("类别2");QBarSet *set2 = new QBarSet("类别3");for (int i=0;i<vecPerformance.size();i++) {*set0 << vecPerformance[i].mem1;*set1 << vecPerformance[i].mem2;*set2 << vecPerformance[i].mem3;}set0->setLabelColor(QColor(0,0,255));set1->setLabelColor(QColor(0,0,255));set2->setLabelColor(QColor(0,0,255));QBarSeries *series = new QBarSeries();series->append(set0);series->append(set1);series->append(set2);series->setVisible(true);series->setLabelsVisible(true);series->setLabelsPosition(QAbstractBarSeries::LabelsOutsideEnd);chart->addSeries(series);//添加系列到QChart上chart->setTheme(QChart::ChartThemeLight);//设置白色主题QBarCategoryAxis *axisX = new QBarCategoryAxis;for (int i=0;i<vecPerformance.size();i++) {axisX->append("项目"+QString::number(i));}axisX->setLabelsColor(QColor(7,28,96));chart->addAxis(axisX, Qt::AlignBottom);series->attachAxis(axisX);QValueAxis *axisY = new QValueAxis;axisY->setRange(0,MaxValue+0.02);chart->addAxis(axisY, Qt::AlignLeft);series->attachAxis(axisY);axisY->setTitleText("指标");chart->legend()->setVisible(true);chart->legend()->setAlignment(Qt::AlignBottom);//底部对齐chart->legend()->setBackgroundVisible(true);//设置背景是否可视chart->legend()->setAutoFillBackground(true);//设置背景自动填充chart->legend()->setColor(QColor(222,233,251));//设置颜色chart->legend()->setLabelColor(QColor(0,100,255));//设置标签颜色chart->legend()->setMaximumHeight(50);ui->widget->setChart(chart);return info;}
参考内容
QT-QChart之曲线图,饼状图,条形图使用 https://www.cnblogs.com/lifexy/p/10985191.html QTCharts入门 使用QChartView做折线图 https://blog.csdn.net/baizy77/article/details/84107786
