qcustomplot2.1.1绘制瀑布水平流动实例
时间: 2023-11-14 08:04:27 浏览: 89
关于QT利用Qcustomplot实现瀑布图的demo
4星 · 用户满意度95%
以下是使用QCustomPlot 2.1.1版本绘制水平瀑布图的示例代码。其中,数据点是随机生成的,每次绘制时将数据点向左移动一个像素,从而实现水平流动的效果。
```cpp
#include <QApplication>
#include <QMainWindow>
#include <QTimer>
#include <qcustomplot.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 创建主窗口
QMainWindow mainWindow;
mainWindow.setWindowTitle("Waterfall Chart Demo");
// 创建QCustomPlot实例
QCustomPlot *customPlot = new QCustomPlot(&mainWindow);
customPlot->setObjectName("customPlot");
mainWindow.setCentralWidget(customPlot);
// 设置x轴和y轴范围
customPlot->xAxis->setRange(0, 50);
customPlot->yAxis->setRange(0, 10);
// 创建瀑布图
QCPColorMap *colorMap = new QCPColorMap(customPlot->xAxis, customPlot->yAxis);
colorMap->setGradient(QCPColorGradient::gpJet);
colorMap->setDataRange(QCPRange(0, 10));
colorMap->setData(new QCPColorMapData(50, 10, QCPRange(0, 50), QCPRange(0, 10)));
colorMap->setInterpolate(false);
colorMap->setTightBoundary(true);
// 将瀑布图添加到QCustomPlot实例中
customPlot->addPlottable(colorMap);
// 更新数据点的函数
QObject::connect(new QTimer(&mainWindow), &QTimer::timeout, customPlot, [colorMap]() {
// 生成随机数据点
QVector<double> data(10);
for (int i = 0; i < data.size(); ++i) {
data[i] = (qrand() % 100) / 10.0;
}
// 将数据点逐一向左移动一个像素
QCPColorMapData *mapData = colorMap->data();
for (int i = mapData->keyRange().upper; i > 0; --i) {
for (int j = 0; j < mapData->valueRange().size(); ++j) {
mapData->setCell(i, j, mapData->cell(i - 1, j));
}
}
// 将新的数据点添加到瀑布图的右侧
for (int i = 0; i < data.size(); ++i) {
mapData->setCell(0, i, data[i]);
}
// 更新瀑布图的显示
colorMap->setData(mapData);
colorMap->rescaleDataRange();
colorMap->rescaleAxes();
colorMap->parentPlot()->replot();
});
// 启动定时器
static_cast<QTimer *>(mainWindow.startTimer(50))->start();
// 显示主窗口
mainWindow.show();
return a.exec();
}
```
在上述示例代码中,我们首先创建了一个QMainWindow和一个QCustomPlot实例,并将QCustomPlot实例设置为QMainWindow的中央控件。然后,我们设置了x轴和y轴的范围,并创建了一个水平瀑布图。接下来,我们创建了一个定时器,每隔50毫秒就会更新瀑布图的数据点,从而实现水平流动的效果。最后,我们启动定时器并显示主窗口。
阅读全文