基本思路
- 使用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`文件中添加内容
```cpp
QT += 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 table
QChart* 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