Qt事件处理(五)——定时器

Qt Quick事件处理之鼠标、键盘、定时器 在《Qt on Android: Qt Quick 事件处理之信号与槽》中介绍了 QML 中如何使用内建类型的信号以及如何自定义信号,这次我们来看看如何处理鼠标、键盘、定时器等事件。这些时间在处理时,通常是通过信号来完成的。    广而告之:我正在参加 优快云 博文大赛,请给我的参赛文章《Qt on Android: Qt Quick 事件处理之信号与槽》投票,谢谢。鼠标事件处理    桌面开发 阅读详情

目录

前言

因为需要在开发板上无法直接使用OpenCV的摄像头获取事件来获取视频帧进行处理,而前面已经移植好了v4l2驱动摄像头,这时候需要对图像进行进一步的处理,需要用到定时器来获取视频帧。使用定时器可以使用QTimer的方法,也可以使用timerEvent来做处理。

定时器

QTimer

QTimer timer = new QTimer();
connect(timer, SIGNAL(timeout()), this, SLOT(changeValue()));
// changeValue is slot function
timer->start(1000);
// another way
 timer->setInterval(1000);
 timer->start();

参考Qt之QTimer

timerEvent

参考Qt中两种定时器用法。QObject是所有Qt对象的基类,它提供了一个基本的定时器。通过QObject::startTimer(),可以把一个1ms为单位的时间间隔作为参数来开始定时器,这个函数返回一个唯一的整数定时器的标识符。这个定时器开始就会在每一个时间间隔”触发”,直到明确的使用这个定时器的标识符来调用QObject::killTimer()结束。

  • int QObject::startTimer(int interval);
    开始一个定时器并返回定时器ID,如果不能开始一个定时器,将返回0。定时器开始后,每隔interval毫秒间隔将触发一次超时事件,直到killTimer()被调用来删除定时器。如果interval为0,那么定时器事件每次发生时没有窗口系统事件处理。

  • virtual voidQObject::timerEvent(QTimerEvent *event);
    虚函数timerEvent()被重写来实现用户的超时事件处理函数。如果有多个定时器在运行,QTimerEvent::timerId()被用来查找指定定时器,对其进行操作。当定时器事件发生时,虚函数timerEvent()随着QTimerEvent事件参数类一起被调用,重载这个函数可以获得定时器事件。

void Widget::timerEvent(QTimerEvent *event)
{
    if(event->timerId() == myTimerId)
    {
        count++;
        update();
    }
    else if(event->timerId() == myTimerId2)
    {
        count--;
        update();
    }

}

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.drawText(100, 150, QString::number(count));
}

void Widget::beginTimer()
{
//    myTimerId = startTimer(500);
    myTimerId2 = startTimer(1000);

//    QMessageBox::information(this, tr("Test"), tr("begin Timer"));
}

void Widget::endTimer()
{
//    killTimer(myTimerId);
    killTimer(myTimerId2);
//    QMessageBox::information(this, tr("Test"), tr("end Timer"));
}

在上述代码中,beginTimer()函数是一个按钮的槽函数,当按钮被点击,就会触发startTimer(),我们可以在beginTimer()中设置多个timerId,然后特定事件超时之后,就会触发timerEvent()中的对应的timerId,从而可以实现在不同的时间处理不同的事件。也就是如果有多个时间不同的定时器事件,我们可以定义多个startTimer()产生特定的timeId在不同时间对事件进行处理。
注意:定义了多个timeId都必须用多个killTimer()来进行释放定时器。

代码

timeEvent_demo

Qt事件处理汇总 QT事件产生后会被立即发送到相应的QWidget对象相应的QWidget中的event(QEvent *)进行事件处理event(QEvent *)根据事件类型调用不同的事件处理函数在事件处理函数中发送QT预定义的信号调用信号关联的槽函数public:protected:elseMain.cpp编译运行程序,鼠标点击按钮后打印出“Left press”字符串,没有打印出“child clicked”字符串。 阅读详情

相关推荐

Qt Quick事件处理

MouseArea 鼠标句柄交互 1MouseEvent鼠标事件 2WheelEvent滚轮事件 3DragEvent拖放事件 键盘事件KeyEvent 1导航键KeyNavigation 自己博客中的代码可以在https://github.com/xixihaha331/QT_Repository中获取 事件处理 MouseArea 鼠标句柄交互 MouseEvent鼠标事件 W

xixihaha331的博客 1135

QObject::startTimer: Timers cannot be started from another thread

QObject::startTimer: Timers cannot be started from another thread 错误原因:QObject是可重入的,它的大多数非GUI子类,例如QTimer,QTcpSocket,QUdpSocketandQProcess都是可重入的,使得这些类可以同时用于多线程。需要注意的是,这些类设计为从一个单一的线程创建和使用的,在一个线程创建对象,而从另外一个线程调用对象的函数并不能保证行得通。 本例中成员变量QTimer是在主线程创建对象时创建的,但...

《好好先生》专栏 1万+

Qt中定时器的使用及TimerID的详解

通过TimerID,我们可以对定时器进行操作,如启动、停止和修改定时器的属性。在上述示例代码中,我们并没有直接使用TimerID,而是通过定时器对象的方法来进行操作。Qt提供了QTimer类来简化定时器的创建和管理,通过设置时间间隔和触发模式,以及连接相应的信号和槽函数,我们可以轻松地使用定时器。此外,每个定时器对象都有一个唯一的TimerID,通过TimerID,我们可以对定时器进行更加灵活和精确的控制。其中,定时器是一项常用的功能,用于在预定的时间间隔内执行特定的任务。在这两个定时器事件中,我们使用。

CyberByte的博客 509

2种情况可能造成:QObject::startTimer: Timers cannot be started from another thread

一、分析 2 种情形,这里重现一下 1、一般情况 这种一般比较常见 1、创建自定义类型 MyTest 2、头文件 mytest.h #ifndef MYTEST_H #define MYTEST_H #include <QThread> #include <QTimer> class MyTest : public QThread { Q_OBJECT public: explicit MyTest(QObject *parent = nullptr)

大袖技术 8648

深入理解Qt事件处理与定时器机制

Qt是一个跨平台的应用程序框架,它提供了一套丰富的事件处理机制,用以响应和处理用户输入、系统通知以及其它运行时事件。事件处理系统是Qt框架的核心之一,它允许开发者编写与平台无关的代码,并且以统一的方式处理各种事件。在需要对特定的用户操作或内部事件进行特殊处理时,开发者可以创建自定义事件。创建自定义事件通常涉及继承QEvent或其子类,并重写构造函数以添加自定义数据。例如,创建一个自定义的网络数据接收事件:public:private:int m_data;

weixin_35266799的博客 837

别再只盯着内存溢出了!从Unity崩溃日志中揪出AssetBundle.LoadAsset_Internal的真凶

本文深入解析Unity崩溃日志中AssetBundle.LoadAsset_Internal错误的真实原因,帮助开发者超越内存溢出的表象,识别文件损坏、热更新陷阱等核心问题。通过日志分析技巧、最佳实践和高级调试方法,提供系统化的解决方案,确保Unity资源加载的稳定性。

weixin_42676824的博客 251

多线程中的movetoThread思考(qt)

1.正确用法 无需子类化线程类,通过信号启动定时器。 TestClass::TestClass(QWidget *parent) QWidget(parent) { m_pThread = new QThread(this); m_pTimer = new QTimer(); m_pTimer->moveToThread(m_pThread); m_pTimer->setInterv...

qq_36184671的博客 1263

thinkcmf 代码执行 (CVE-2019-7580) 漏洞复现

所有文章,仅供安全研究与学习之用,后果自负! thinkcmf 代码执行 CVE-2019-7580thinkcmf 代码执行 (CVE-2019-7580)0x01 漏洞描述0x02 影响范围0x03 漏洞复现3.1 登录后台3.2 漏洞利用3.2.1webshell3.2 phpinfo3.3 获取系统命令0x04 漏洞修复 thinkcmf 代码执行 (CVE-2019-7580) 复现小心会搞崩环境。 0x01 漏洞描述 ThinkCMF是一款支持Swoole的开源内容管理框架(CMF),基于Thi

YouthBelief的博客 4264

事件处理之鼠标键盘定时器----(Qt Quick 教程五)

我们来看看如何处理鼠标、键盘、定时器等事件。这些时间在处理时,通常是通过信号来完成的。 鼠标事件处理 看一个简单的处理鼠标事件的例子,先看代码(handle_mouse.qml): import QtQuick 2.0 import QtQuick.Controls 1.1 Rectangle { width: 320; height: 240; ...

望那伊人的博客 1039

SAP(ERP)工艺路线(Routing)业务视角解析

工艺路线(Routing)也是PP模块,即生产制造模块中最重要核心主数据之一,也是ERP(SAP)顾问,必需从业务与系统深入掌握的重要主数据,它也是整个生产计划与生产流程的重要基础。因为执行步骤只是操作层面的认知,业务顾问需要从业务本质上去理解它,要真正从业务视角理解工艺路线的业务价值,而不仅仅是操作层面的认知。因此将工艺路线理解为“有以上业务本质的理解,然后进到SAP系统中,就容易理解工艺路线(Routing)的每一组成部分结构与功能了,本质就是理解制造企业如何将设计意图转化为物理现实的编码规则。

m0_45197968的博客 1503

vLLM专题(七)-支持的模型列表

vLLM支持跨多种任务的生成式和池化模型。如果一个模型支持多个任务,您可以通过–task参数来设置任务。对于每个任务,我们列出了已在vLLM中实现的模型架构。每个架构旁边,我们列出了一些使用该架构的流行模型。

1260

QThread错误分析总结

【错误一】ASSERT failure in QCoreApplication::sendEvent: “Cannot send events to objects owned by a different thread. Current thread 2c3fef98. Receiver ‘’ (of type ‘Pictures’) was created in thread 2e2a7d98”, 原因分析: postEvent: 可以给别的线程发送事件。事件会在目的对象所属的线程中运行。这是一个异步接

zhanghuahuapoi的博客 6770

Windows环境下QGIS完整编译指南(从环境搭建到问题解决)

本文详细介绍了在Windows 11系统下编译QGIS 3.40.12版本的完整流程。主要内容包括:前期准备工作(系统要求、工具清单)、环境搭建(Visual Studio 2026、OSGeo4W、Qt Creator的安装配置)、以及详细的CMake参数设置。特别强调了依赖管理的重要性,并提供了解决常见编译错误的方案。该指南适用于GIS二次开发、QGIS功能定制和源码学习等场景,通过OSGeo4W工具简化了复杂的依赖管理过程,确保编译过程的可重复性。

LuckyHanMo的博客 1335

【Qt 事件】—— 详解Qt事件处理

详解Qt事件处理

m0_56069910的博客 3751

基于STM32设计的心率脉搏测量仪(项目资料ID:9)

本设计基于STM32F103单片机开发了一款便携式心率脉搏测量仪,通过光电传感器采集脉搏信号,经放大(约1200倍)、滤波(低通及四阶低通滤波)、比较及偏置电压调理后,由STM32进行ADC采样与数据处理。硬件采用Altium Designer设计,包含信号调理电路(限定心率范围43.4-800次/分钟)及电源管理模块;软件基于STM32CubeMX开发,利用队列存储和时间间隔平均算法优化精度,实现多终端显示(OLED实时心率/动画、MATLAB波形分析、蓝牙传输至手机)。系统支持自动启停(检测脉搏启

以培养嵌入式工程师为己任 1万+

单片机设计具备断电记忆功能的计时器

本文介绍了如何设计一款具备断电记忆功能的计时器,利用单片机和EEPROM存储器实现了计时器值的保存和恢复。当然,在实际的设计中还需要考虑其他因素,如电源管理、时钟精度等,以确保计时器的正常运行和准确性。选择合适的单片机:在设计计时器时,我们需要选择一款具备存储功能的单片机,以便在断电后能够保存计时器的状态。可以优化显示方式,使用更加直观的界面来展示计时器的值;函数中,我们首先从 EEPROM 中读取计时器的初始值,然后在一个无限循环中每秒钟增加计时器的值,并将新的值写入 EEPROM 中。

RlDart的博客 1094

Qt--定时器的使用

Qt提供了两种定时器,一种是QObject类的定时器,另一种是QTimer类的定时器。 (1)QObject类的定时器 如果该类直接或间接继承了QObject,就可以使用这个。 通过函数startTimer()来启动,通过killTimer()来结束,通过QTimerEvent来处理定时器事件。 函数原型: int QObject::startTimer(int interval, Qt...

没闲的小孩多酱 4083

RabbitMQ高级特性 - 生产者消息确认机制

为了保证信息 从生产者 发送到 队列,因此引入了生产者的消息确认机制.通过事务机制实现.通过发送确认机制(confirm 和 return)实现.因为事务机制比较消耗性能,在实际工作中用的也不多,因此这里主要介绍confirm 和 return机制来实现发送放的确认.a)confirm 确认模式如上图,confirm 确认模式主要保障于 生产者 到 交换机 的消息可靠性.如果 Exchange成功收到消息,那么 ConfirmCallback 这个回调 ack 参数就为true。

CYK_byte的博客 1886

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

先上个实例 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; anchor...

火山上的企鹅 4036

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Qt中两种定时器用法

在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器;一种是使用QTimer类。定时器的精确性依赖于操作系统和硬件,大多数平台支持20ms的精确度。 1.QObject类的定时器     QObject是所有Qt对象的基类,它提供了一个基本的定时器。通过QObject::startTimer(),可以把一个一毫秒为单位的时间间隔作为参数来开始定时器,这个函数返回一个唯一的整

初学者的专栏 8万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Qt使用定时器方法一:定时器事件

首先,Qt对象的基类QObject为我们提供了一个基本的定时器,它是通过定时器事件来触发的。其步骤如下: step1:通过函数int QObject::startTimer(int interval)函数来启动一个定时器,其中参数interval为时间间隔,其时间单位为毫秒(ms);startTimer()函数的返回类型为int,这个整型数字是定时器的标识符,用来唯一标识这个此时由startTi

芳草源的博客 7822

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

QT学习笔记(五)——qt的事件、事件过滤器以及定时器

QT学习笔记(五)——qt的事件、事件过滤器以及定时器

weixin_49513223的博客 1419

QT定时器事件处理时序

在QT中,如果一个定时器事件(QTimer)的处理还没有完成,而下一个定时器的触发时间已经到了,Qt的事件循环会将这些事件进行排队,等待处理。此时定时器事件会按照他们被触发的顺序依次处理,但不会有两个定时器事件被同时处理。如果定时器事件的处理时间超过了定时器的间隔时间,那么新的定时器事件将被添加到事件队列中。因此,如果定时器事件处理较慢,可能会导致事件堆积,并且实际触发的定时器事件频率比期望的要低。2.延迟触发:事件是按顺序处理的,如果事件处理时间超过了定时器的间隔时间,定时器的触发频率将低于预期的频率。

weixin_45767431的博客 1017

Qt之定时器

  Qt使用定时器有两种方法,一种是使用QObiect类的定时器,一种是使用QTimer类。定时器的精确性依赖于操作系统和硬件,大多数平台支持20ms的精确度。 QObject类的定时器   QObject是所有Qt对象的基类,它提供了一个基本的定时器。通过QObject::startTimer,可以把一个一毫秒为单位的时间间隔作为参数来开始定时器,这个函数返回一个唯一的整数定时器的标识符。这个定时器开始就会在每一个时间间隔触发,直到明确地使用这个定时器的标识符来调用QObject::killTimer结束

健身房 1万+

8、Qt中定时器的使用

Qt定时器;QTimerEvent;QTimer

Viciower的博客 3530
上一篇: Qt编程错误集锦
下一篇: Qt多线程学习(一)——继承QThread
simonXi-tech
博客等级 码龄10年 398粉丝 52原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值