QCustomPlot 是一个用于 Qt 应用程序的高性能绘图库,特别适合绘制二维图表。它提供了丰富的功能,可以实现多种类型的图表,如折线图、柱状图、散点图等。以下是 QCustomPlot 的一些主要特点:
易于使用:QCustomPlot 的 API 简单直观,适合快速上手,支持丰富的文档和示例。
高性能:支持大量数据点的绘制,优化了渲染效率,适合实时数据的显示。
灵活的定制:用户可以自定义图表的外观,包括轴的刻度、标签、颜色、图例等。
交互性:支持鼠标交互功能,如缩放、平移和选择,增强用户体验。
支持多种格式:能够导出图表为多种格式,包括 PDF 和位图,方便用于报告和展示。
跨平台支持:作为 Qt 的一部分,QCustomPlot 可以在多个平台上运行,如 Windows、macOS 和 Linux。
1.下载Qcustomplot
首先需要去官网下载Qcustomplot:https://www.qcustomplot.com/
按照你当前的QT版本选择对应的压缩包,请注意Qcustomplot最高支持到QT6.4
下载后进行解压缩
将文件夹中的.cpp和.h文件复制到QT工程目录下
pro文件变更
2.设置
选择一个Widget窗口类,并提升为Qcustomplot
3.demo
void MainWindow::GraphDemo(QString results)
{
ui->widget->setLocale(QLocale(QLocale::Chinese, QLocale::China));
ui->widget->addGraph();
QPen pen;
pen.setColor(QColor(0, 0, 255, 200));
ui->widget->graph(0)->setLineStyle(QCPGraph::lsLine);//设置数据点由一条直线连接
ui->widget->graph(0)->setPen(pen);
ui->widget->addGraph(); // 红色点
ui->widget->graph(1)->setPen(QPen(Qt::red));
ui->widget->graph(1)->setLineStyle(QCPGraph::lsNone);
ui->widget->graph(1)->setScatterStyle(QCPScatterStyle::ssDisc);
QStringList list = results.split("#");//假设数据
qDebug()<<list<<list.length();
QVector<double> time(21), value(21);//给数组赋值,时间和数值 7*3=21个数据
for (int i=0; i<21; ++i)
{
time[i] = QDateTime::fromString(list[2*i],"yyyy-MM-dd hh:mm:ss").toTime_t();
temp = list.at(2*i+1);
value[i] = temp.toInt();
}
ui->widget->graph(0)->setData(time, value);//设置数据
ui->widget->graph(0)->rescaleValueAxis();
ui->widget->graph(1)->addData(time, value);//设置点
// 配置下轴显示日期和时间,而不是数字:
ui->widget->xAxis->setTickLabelType(QCPAxis::ltDateTime);
ui->widget->xAxis->setDateTimeFormat("MM-dd");
// 设置一个更紧凑的字体大小为底部和左轴刻度标签:
ui->widget->xAxis->setTickLabelFont(QFont(QFont().family(), 8));
ui->widget->yAxis->setTickLabelFont(QFont(QFont().family(), 8));
// 设置一天为固定的一个刻度
ui->widget->xAxis->setAutoTickStep(false);
ui->widget->xAxis->setTickStep(3600*24); // 一天的秒数
ui->widget->xAxis->setSubTickCount(9);//一个大刻度包含4个小刻度
// 设置轴标签
ui->widget->xAxis->setLabel("时间(h)");
ui->widget->yAxis->setLabel("体温(℃)");
// 设置上边和右边轴没有刻度和标签
ui->widget->xAxis2->setVisible(true);
ui->widget->yAxis2->setVisible(true);//坐标轴是否可见
ui->widget->xAxis2->setTicks(false);//刻度是否可见
ui->widget->yAxis2->setTicks(false);
ui->widget->xAxis2->setTickLabels(false);//轴标签是否可见
ui->widget->yAxis2->setTickLabels(false);
// 设置轴范围和显示全部数据
ui->widget->xAxis->setRange(time[0],time[0]+24*3600*7);
ui->widget->yAxis->setRange(30, 45);
// 显示图例
ui->widget->graph(0)->setName("心率");
ui->widget->graph(1)->setName("具体数值");
ui->widget->legend->setVisible(true);
}
评论区