本文从我原先发布在 CSDN 的文章迁移而来,原文链接:https://blog.csdn.net/wang112031/article/details/103323765。

QCustomPlot QCPAxisTicker 是用于创建刻度位置和刻度标签的基类,子类和刻度格式如下图

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QString DateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz");
    qDebug()<<"DateTime"<<DateTime;

    qint64 ms = QDateTime::currentDateTime().toMSecsSinceEpoch();
    qint64 sec = QDateTime::currentDateTime().toSecsSinceEpoch();

    qDebug()<<"ms:"<<ms<<"sec"<<sec;

    QString DateTimeStr = QDateTime::fromMSecsSinceEpoch(ms).toString("yyyy-MM-dd HH:mm:ss:zzz");
    qDebug()<< DateTimeStr;

    QSharedPointer<QCPAxisTickerDateTime> dateTimeTicker(new QCPAxisTickerDateTime);
    //dateTimeTicker->setTickOrigin(ms/1000.0);
    //设置时间刻度值格式 格式参考QDateTime
    dateTimeTicker->setDateTimeFormat("yyyy-MM-dd hh:mm:ss:zzz");
    dateTimeTicker->setTickCount(10+1);
    //设置刻度显示策略 QCPAxisTicker::tssReadability   可读性优先于setTickCount
    //QCPAxisTicker::tssMeetTickCount 牺牲可读性使用setTickCount
    dateTimeTicker->setTickStepStrategy(QCPAxisTicker::tssMeetTickCount);
    ui->plot->xAxis->setTicker(dateTimeTicker);
    //设置刻度标签顺时针旋转30度
    ui->plot->xAxis->setTickLabelRotation(30);
    ui->plot->xAxis->setSubTicks(false);
    ui->plot->xAxis->setRange(sec, sec+3600);
    ui->plot->addGraph();
    ui->plot->replot();

    QTimer *updateTimer = new QTimer(this);
    connect(updateTimer, SIGNAL(timeout()), this, SLOT(slotUpdateTimer()));
    updateTimer->start(100);
}
void MainWindow::slotUpdateTimer()
{
    qint64 sec = QDateTime::currentDateTime().toSecsSinceEpoch();
    qint64 ms = QDateTime::currentDateTime().toMSecsSinceEpoch();
    qsrand((uint)(ms&0xffffffff));
    ui->plot->graph(0)->addData(ms/1000.0, qrand()%100);
    ui->plot->graph(0)->rescaleAxes();
    ui->plot->replot();
}