【Qt】统计绘图

基本思路

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

统计表格

  • 示例程序
void Form_pointState::buildTable(QVector<Point*> 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<ui->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方法转换

柱状图

  • 示例程序
  • .pro文件中添加内容
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

更多内容

在这里插入图片描述
在这里插入图片描述
欢迎关注公众号,交流每日所见所想、学习经验

在这里插入图片描述

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值