(QT-UI)十三、通过定时器,实时更新时间轴

   本系列预计实现

①刻度上方文字显示,

②时间轴拖动效果,

③时间轴刻度缩放,

④时间轴和其他控件联动显示,

⑤鼠标放置到时间轴,显示具体时间。

⑥通过定时器,实时更新时间轴

⑦时间轴上绘制时间片

 完整代码可见GitHub - 754816/QT_TimeLine: qt时间轴实现效果

1、基础思路

使用QTimer创建一个定时器,设置为每0.5秒触发一次,获取当前的系统时间,并且显示到时间轴上,看起来就像是时间轴随着系统时间更新

2、代码实现

在头文件中,添加QTimer和全局变量m_Timer

#include <QTimer>
    
private:
    QTimer* m_Timer;

在源文件中,初始化,并且添加绑定槽函数,当设定时间间隔到期后,执行槽函数内的代码。最后通过start函数,启动定时器。

    m_Timer = new QTimer(this);
    connect(m_Timer, &QTimer::timeout, this, [=](){
        //获取当前系统时间
        QDateTime curDateTime = QDateTime::currentDateTime();
        //更新时间
        ui->widget->SetDateTime(curDateTime);
    });
    //设置启动间隔为500毫秒,即0.5秒
    m_Timer->start(500);
    m_Timer->stop;

当需要停止的时候,调用stop函数即可,后续只需要不断的start(500)和stop即可定时触发效果。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Qt接收数据实时显示并绘制成折线图,可以参考以下步骤: 1. 创建一个主窗口,添加一个QCustomPlot控件用于绘制折线图。 2. 在主窗口中创建一个Qtimer对象,用于定时更新数据。 3. 在Qtimer的槽函数中,读取串口数据并更新折线图。 4. 在QCustomPlot控件的初始化函数中,设置x和y轴范围、坐标轴标签等属性。 5. 在更新折线图的槽函数中,先将新的数据添加到QVector容器中,再将容器中的数据绘制成折线图。 下面是一个简单的代码示例,仅供参考: ``` // 主窗口类 class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void updateData(); // 定时更新数据的槽函数 void plotGraph(); // 绘制折线图的槽函数 private: Ui::MainWindow *ui; QSerialPort *serialPort; // 串口对象 QTimer *timer; // 定时器对象 QVector<double> xData, yData; // 数据容器 }; // 构造函数 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // 创建串口对象 serialPort = new QSerialPort(this); serialPort->setPortName("COM1"); serialPort->setBaudRate(QSerialPort::Baud9600); serialPort->setDataBits(QSerialPort::Data8); serialPort->setStopBits(QSerialPort::OneStop); serialPort->setParity(QSerialPort::NoParity); serialPort->open(QIODevice::ReadOnly); // 创建定时器对象 timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(updateData())); timer->start(100); // 每100ms更新一次数据 // 初始化QCustomPlot控件 ui->plot->addGraph(); ui->plot->graph(0)->setPen(QPen(Qt::blue)); ui->plot->xAxis->setLabel("Time"); ui->plot->yAxis->setLabel("Value"); ui->plot->xAxis->setRange(0, 10); ui->plot->yAxis->setRange(0, 100); } // 析构函数 MainWindow::~MainWindow() { delete ui; } // 定时更新数据的槽函数 void MainWindow::updateData() { QByteArray data = serialPort->readAll(); // 处理数据... plotGraph(); // 更新折线图 } // 绘制折线图的槽函数 void MainWindow::plotGraph() { double x = QDateTime::currentDateTime().toMSecsSinceEpoch()/1000.0; // 获取当前时间 double y = 50; // 假设读取到的数据为50 xData.append(x); yData.append(y); // 绘制折线图 ui->plot->graph(0)->setData(xData, yData); ui->plot->replot(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值