先看兩個小知識:
1、顯示數據散點:ui->customPlot->graph(0)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, 5));//散點
2、連接散點的方式:customPlot->graph(0)->setLineStyle(QCPGraph::lsStepLeft);
有好幾種:折線連接、左端點階梯連接、右端點階梯連接等。
QCustomPlot支持以數值、日期、時間做X軸。
數值就不說了,只講一下:1、日期,2、時間
1、日期做X軸,可以顯示出:年-月-日-時-分-秒-毫秒,
X軸的數據以1970-01-01 00:00:00至當前時間的總秒數,關於“總秒數”可參考:qint64 QDateTime::currentSecsSinceEpoch()。
如果想在X軸顯示出毫秒數,那么只能把X值用到小數位,可以用 “總毫秒數”:qint64 QDateTime::currentMSecsSinceEpoch() 除以1000.0f來設置X值。
例如:
若某個點的X值=0,則該點在圖中的X坐標會顯示為1970-01-01 00:00:00
若某個點的X值=5,則該點在圖中的X坐標會顯示為1970-01-01 00:00:05
若某個點的X值=3601,則該點在圖中的X坐標會顯示為1970-01-01 01:00:01 (3601秒為1個小時零1秒)
若某個點的X值=1596415566,則該點在圖中的X坐標會顯示為2020-08-03 08:46:06
示例:
QVector<double> time(200), value(200); for(int i = 0; i < time.count(); i++) { time[i] = QDateTime::currentSecsSinceEpoch() + i;//方法1:以此刻的時間做X軸(總秒數),一秒一個值 //time[i] = QDateTime::currentMsecsSinceEpoch() / 1000.0 + i;//方法2 value[i] = qrand() % 10 - 5;//[-5, 5]隨機數做y值 }//生成模擬數據 ui->customPlot_2->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);//添加鼠標拖放支持、滾輪縮放支持 ui->customPlot_2->addGraph(); ui->customPlot_2->graph(0)->setData(time, value);//設置數據源 ui->customPlot_2->graph(0)->rescaleAxes(); QSharedPointer<QCPAxisTickerDateTime> dateTicker(new QCPAxisTickerDateTime);//日期做X軸 dateTicker->setDateTimeFormat("yy-MM-dd hh:mm:ss");//日期格式(可參考QDateTime::fromString()函數) ui->customPlot_2->xAxis->setTicker(dateTicker);//設置X軸為時間軸

2、時間做X軸
時間做X軸可以顯示:日-時-分-秒-毫秒,舉幾個例子:
X值為0時,代表第0天0時0分0秒0毫秒,
X值為1時,代表第0天0時0分1秒0毫秒
X值為2.389時,代表第0天0時0分2秒389毫秒
X值為3601時,代表第0天1時0分1秒0毫秒
以此類推。
#pragma execution_character_set("utf-8")//避免中文亂碼 QVector<double> time(20), value(20); for(int i = 0; i < time.count(); i++) { time[i] = 3600 * 24 * 3 + 3600 * 2 + i * 0.1;//模擬從第3天2點整開始,每100ms一個數 value[i] = qrand() % 10 - 5; } ui->customPlot_2->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables); ui->customPlot_2->addGraph(); ui->customPlot_2->graph(0)->setData(time, value); ui->customPlot_2->graph(0)->rescaleAxes(); ui->customPlot_2->graph(0)->setLineStyle(QCPGraph::lsStepLeft);//左端點階梯線樣式 ui->customPlot_2->graph(0)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, 5));//顯示散點 QSharedPointer<QCPAxisTickerTime> dateTicker(new QCPAxisTickerTime); dateTicker->setTimeFormat("%h:%m:%s.%z\n第%d天");//時間格式,參考本函數的幫助文檔 ui->customPlot_2->xAxis->setTicker(dateTicker);