QT Quick QML 事件处理——定时器


所有的热爱都要不遗余力,真正喜欢它便给它更高的优先级,和更多的时间吧!

QML其它文章请点击这里:     QT QUICK QML 学习笔记


计时器可以用于触发一个动作,一次或在给定的时间间隔内重复触发,在嵌入式单片机中也是非常常见。简单说设定一个周期定时值,值溢出后将触发事件,如设定起床闹钟值,时间到,闹钟响,恩,该起床干活啦~ 关闭后,如果设定了重复,那么每天都得早起哦~

1. 实例

直接推实例:

import QtQuick 2.0
import QtQuick.Window 2.12
import QtQuick.Controls 1.4

Window {
    id: root;
    visible:  true;
    width: 400;
    height: 200;

    Text {
        id: cnt;
        anchors.centerIn: parent;
        color: "red";
        font.pixelSize: 24;        //像素大小
        property int seconds : 4;
    }

    Timer {
        id: tim;
        interval: 1000;          //间隔1s
//        running: true;         //开启,则立即启动
        repeat: true             //开启循环
        triggeredOnStart: true;  //启动后,将立即触发一次
        onTriggered: {
            cnt.text = cnt.seconds;
            cnt.seconds --;
            if(cnt.seconds <0)
            {
                tim.stop();
                cnt.text = "Time out!!!"
            }
        }
    }

    //开始
    Button {
        id: startBtn;
        anchors.bottom: cnt.top;
        anchors.bottomMargin: 30;
        anchors.right:  stopBtn.left;
        anchors.rightMargin: 10;
        text: "Start";
        onClicked: {
            tim.start();
            cnt.seconds = 4;
        }
    }

    //停止
    Button {
        id: stopBtn;
        anchors.bottom: cnt.top;
        anchors.bottomMargin: 30;
        anchors.horizontalCenter: cnt.horizontalCenter;
        text: "Stop";
        onClicked: {
            tim.stop();
        }
    }

    //恢复计时。暂停后恢复计数
    Button {
        id: restartBtn;
        anchors.bottom: cnt.top;
        anchors.bottomMargin: 30;
        anchors.left:  stopBtn.right;
        anchors.leftMargin: 10;
        text: "Restart";
        onClicked: {
            tim.restart();
        }
    }
}

2. 运行结果

开始界面和停止界面:
在这里插入图片描述
重新开始界面和时间到界面:
在这里插入图片描述

3. 定时器详细介绍

导入声明

import QtQml 2.12

属性

● interval : int
设置触发间隔,单位:ms。
默认间隔:1000毫秒。

● repeat : bool
为真,则会重复触发计时器; 否则只触发一次,然后停止(即“running”将设置为假)。
默认为false。

● running : bool
如为真,则启动计时器; 否则停止计时器。对于不是重复的计时器,在触发计时器后将running设置为false。
默认为false。

● triggeredOnStart: bool
当计时器启动时,本来定时器启动后要等待设定的间隔才触发。如果triggeredOnStart为真,则在启动时立即触发计时器,然后在指定的时间间隔触发。
如果repeat设置为false,则触发计时器两次;一次开始,一次周期后。
默认为false。

信号

就一个信号:
● triggered()
计时器超时后触发。 对应的处理程序 “onTriggered”

方法

● restart()
重启定时器。如果计时器没有运行,它将被启动,否则它将重置到初始状态并启动。

● start ()
启动定时器。如果计时器已经在运行,则调用此方法无效。

● stop ()
停止计时器。如果计时器不运行,则调用此方法无效。

【参考链接】:
● Qt Quick事件处理之鼠标、键盘、定时器
● QT 5.12官网参考文档


QML其它文章请点击这里:     QT QUICK QML 学习笔记

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Qt中,可以通过定时器来实现QML和后端的定时器同步。具体来说,可以在后端代码中创建一个定时器,然后在QML代码中监听该定时器的信号,从而实现QML和后端的定时器同步。 下面是一个简单的示例代码: 后端代码: ```cpp class MyBackend : public QObject { Q_OBJECT public: MyBackend(QObject* parent = nullptr) : QObject(parent) { // 创建定时器 m_timer = new QTimer(this); m_timer->setInterval(1000); // 设置定时器间隔为1秒 connect(m_timer, &QTimer::timeout, this, &MyBackend::onTimerTimeout); m_timer->start(); // 启动定时器 } signals: void timerTick(); // 定义定时器信号 private slots: void onTimerTimeout() { emit timerTick(); // 发出定时器信号 } private: QTimer* m_timer; }; ``` QML代码: ```qml import QtQuick 2.0 Item { width: 200 height: 200 Text { id: text text: "0" font.pixelSize: 30 anchors.centerIn: parent } Connections { target: myBackend // 监听后端定时器信号 onTimerTick: { text.text = parseInt(text.text) + 1 // 更新文本内容 } } Component.onCompleted: { myBackend.timerTick.connect(function() { }) // 连接定时器信号 } MyBackend { id: myBackend } } ``` 在上述代码中,后端代码中创建了一个定时器,并定义了一个自定义信号`timerTick()`。在QML代码中,通过`Connections`对象监听了该信号,并在接收到信号后更新了文本内容。同时,在QML代码的`Component.onCompleted`信号中,连接了后端代码的定时器信号。 这样,QML和后端的定时器就实现了同步。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值