QT两种方法实现定时器

2023-11-14

方法一

1、重写虚函数

void timerEvent(QTimerEvent* e);

2、启动定时器

  • 返回值为定时器id,参数为定时间隔,单位为毫秒
int startTimer(int interval)

代码

  • widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimerEvent>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
protected:
    void timerEvent(QTimerEvent *e);

private slots:
    void on_pushButton_clicked();
    void on_pushButton_close_clicked();

private:
    Ui::Widget *ui;
    int timerId;
};

#endif // WIDGET_H
  • widget.cpp
#include "widget.h"
#include "ui_widget.h"

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

Widget::~Widget()
{
    delete ui;
}

// 定时间隔到,系统会自动调用该函数
void Widget::timerEvent(QTimerEvent *e)
{
	//进行相关业务
    if(e->timerId() == timerId){
        static int i = 0;
        ui->lineEdit->setText(QString("timer: %1").arg(i++));
    }
}

void Widget::on_pushButton_clicked()
{
    // 启动定时器。参数:定时时间(ms)
    timerId = startTimer(1000);
}

void Widget::on_pushButton_close_clicked()
{
    killTimer(timerId);
}

方法2

1、定义一个QTimer对象

QTimer* timer;

2、启动定时器

  • 参数为定时间隔,单位为毫秒
void QTimer::start(std::chrono::milliseconds msec)

3、连接信号槽

  • 定时间隔到,QTimer对象会发出一个timeout信号。连接信号槽,在槽函数中进行相关操作
[signal] void QTimer::timeout()

代码

  • widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimer>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_close_clicked();

    void timeoutSlot();
private:
    Ui::Widget *ui;
    QTimer* timer;
};

#endif // WIDGET_H

  • widget.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    timer = new QTimer(this);

    //连接信号槽
    connect(timer, &QTimer::timeout, this, &Widget::timeoutSlot);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_pushButton_clicked()
{
    //启动定时器
    timer->start(1000);
}

void Widget::on_pushButton_close_clicked()
{
    //关闭定时器
    timer->stop();
}

void Widget::timeoutSlot()
{
    //进行相关业务
    static int i = 0;
    ui->lineEdit->setText(QString("timer: %1").arg(i++);
}

效果

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT两种方法实现定时器 的相关文章

  • 纹理openGl。 C++、qt

    我试图用草纹理覆盖我的地形 由高度图制成 但它没有按预期工作 我什至无法在简单的 GL QUAD 上获取纹理 结果是多色网络 void GLWidget initializeGL glEnable GL TEXTURE 2D 在 QGLwi
  • 确保 QTableView 中列的唯一值

    我已经实现了一个自定义QTableView and QAbstractTableModel The QTableView使用Qt 用于操作字符串数据的默认文本行编辑委托 我想确保在提交编辑后 按enter 该字符串对于其列来说是唯一的 如果
  • Qt同步QNetworkAccessManager获取

    执行同步 QNetworkAccessManager get 的正确方法是什么 The qt wiki http qt shoutwiki com wiki How to wait synchronously for a Signal in
  • qt 读取就绪信号

    我正在尝试与运行 1996 年处理器的设备建立串行连接 这意味着数据传输回我可能需要几秒钟的时间 我知道readyRead每次有新数据可用时都会生成信号 但我的问题是生成多长时间 这也是我可以测试就绪读取是否较低的一种方法 因为如果当它们不
  • Qt3D 是 Qt5 的一部分吗?

    我在windows中安装了Qt5库 但Qt助手中没有关于Qt3D的文档 Qt3D 是 Qt5 的一部分还是已从发布版本 5 中删除 是的 Qt 3D 成为标准 Qt 库Qt 5 7 发布 http blog qt io blog 2016
  • 选择文件夹后 QFileDialog::getExistingDirectory 不关闭

    In Qt QFileDialog dlg new QFileDialog QDir dir dlg gt getExistingDirectory this tr Choose folder qgetenv HOME 打开文件夹选择对话框
  • QMetaObject::invokeMethod 在以下情况下不起作用:

    从静态类和非主线程调用 简而言之 我有一个类 sapp 它有另一个静态类 tobj 作为静态成员 为了避免静态顺序初始化失败 tobj 在 sapp 的方法中声明 该方法又返回 tobj 实例的指针 我的问题是 tobj 有一个计时器 应该
  • 使用 KDE Kirigami 时未找到 QML 模块

    所以我决定在我的应用程序中使用 KDE Kirigami UI 框架 所以我按照说明进行操作here https api kde org frameworks kirigami html index html 我将存储库克隆到我的应用程序目
  • 如何在Qt WebKit中将网页保存为“另存为完整网页”

    我需要使用 Qt WebKit 保存网页 类似于 另存为完整网页 以下是我的要求 保存索引html文件 维护实体编码 需要下载所有链接的图像和其他资源 需要将html页面中的资源路径更改为本地下载路径 需要维护网页当前状态 我可以使用 Qt
  • 使用 Qt 进行拖放:悬停时了解目标应用程序 - 这可能吗?

    我目前正在探索从 Qt 应用程序拖放到未知目标应用程序的可能性 问题是 Qt 应用程序是否可以接收有关即将接收 drop 的应用程序的信息 例如进程名称或标题 一个 虚构的 示例可以是将绘图从 Qt 窗口拖动到文本编辑器或电子表格编辑器 在
  • Qt Creator 中的按钮是否有隐藏属性?

    Qt Creator 属性托盘中是否有按钮的隐藏属性 我想找到一个 但找不到 我需要禁用一些按钮并隐藏一些按钮 我应该使用属性托盘还是在构造函数中进行 稍后在用户事件中 它们将被启用并显示 有些控件在调色板上具有 可见性 属性 有些则没有
  • QDomDocument 无法设置带有 标记的 HTML 文档的内容

    当我使用QDomDocument对于 HTML 内容 如果存在则无法设置内容在文档的开头 但实际上为什么 例如 考虑以下代码片段 QDomDocument doc QString content a href bar foo a qDebu
  • 是否可以在切换 QTreeWidgetItem 复选框时创建信号?

    我使用下面的代码创建了一个也是 QTreeWidgetItem 的复选框 Populate list QTreeWidgetItem program createCheckedTreeItem QString fromStdString i
  • QMainWindow::showMaximized() 不更新大小

    我正在尝试创建一个QMainWindow封装一个QGraphicsView我把它放进去 我希望它一开始就最大化 所以我这样做 QMainWindow mainWindow new QMainWindow mainWindow gt setW
  • 如何在点击 Qtablewidget 单元格时获取放置在该单元格中的小部件的行号?

    我正在尝试的是当用户选择项目时获取 QcomboBox 的行号 虽然使用它很容易获得单元格的列和行 cellClicked int int 信号 但仅当单元格上没有小部件时才有效 那么如果单元格中放置了小部件 如何获取行号 Note 所有组
  • 一个阻塞但非模态的 QDialog?

    我有一堆图像 我想对其执行一些操作 处理完每个图像后 我的程序应该弹出一个对话框 提示用户是否要继续处理下一个图像或中止 在此之前 他们应该有机会对图像或参数进行一些手动更改 无论如何 他们必须能够访问应用程序的窗口 而调用对话框的方法的执
  • QGroupBox边框

    经过一段时间的搜索后 我发现在组框上设置可见边框的方法是使用 StyleSheet 属性 我补充道 border 2px solid gray 但有几个问题 1 组框内的所有内容也继承此设置 2 边框在标题附近有一个小洞 碎片缺失 Here
  • 删除 QComboBox“下拉”动画

    我正在使用 Qt 4 8 并且想在单击 QComboBox 时摆脱 下拉 动画 我也想稍微移动一下 到目前为止 我一直在考虑重新实现 showPopup 和 hidePopup 但不知道如何使其工作 此外 每次我尝试使用 CSS 进行移动或
  • Windows 消息循环而不是 QApplication::exec() / QApplication::processEvents()

    我是否想念任何一个Qt如果我替换功能QApplication exec 使用标准 Windows 消息循环实现 这应该可以澄清我的意思 运行事件处理的常用 Qt 方式 int main int argc char argv QApplica
  • 调整 QML 图像显示尺寸

    我有一个带有嵌套的 QML 窗口RowLayout 在内排我有两个图像 来源 png这些图像的文件 故意 相当大 当我尝试设置height这些图像上的属性使它们变小 但它们仍然被画得很大 Desired Appearance Actual

随机推荐

  • 啊哈C的简单使用

    打开啊哈C 新建一个程序输出hello world include
  • Java如何获取平台(操作系统)的默认编码

    Java如何获取平台 操作系统 的默认编码 平台 这两个字指的就是操作系统 比如Windows平台 MacOS平台 Linux平台 这也是我们经常读API文档的时候见到的英文 platform 如 platform encoding 如何获
  • spring-MVC

    Spring MVC Hello Spring MVC web xml 在WEB INF目录下创建 web xml 配置Spring MVC的入口 DispatcherServlet 把所有的请求都提交到该Servlet
  • 数据库十一章——并发控制

    11 1 并发控制概述 1 并发操作带来的数据不一致性 1 丢失修改 Lost Update 两个事务T1和T2读入同一数据并修改 T2的提交结果破坏了T1提交的结果 导致T1的修改被丢失 2 不可重复读 Non repeatable Re
  • XGBoost学习(六):输出特征重要性以及筛选特征

    XGBoost学习 一 原理 XGBoost学习 二 安装及介绍 XGBoost学习 三 模型详解 XGBoost学习 四 实战 XGBoost学习 五 参数调优 XGBoost学习 六 输出特征重要性以及筛选特征 完整代码及其数据 XGB
  • makefile-gdb

    makefile gdb 1 makefile makefile 文件中定义了 一系列的规则来指定 哪些文件需要先编译 哪些文件需要后编译 哪些文件需要重新编译 甚至于进行更复杂的功能操作 就像是一个shell脚本 其中也可以执行操作系统的
  • 关于迅雷与优酷

    迅雷的用户许可协议上有这样一段 4 4 使用本 软件 涉及到互联网服务 可能会受到各个环节不稳定因素的影响 存在因不可抗力 计算机病毒 黑客攻击 系统不稳定 用户所在位置 用户关机以及其他任何网络 技术 通信线路等原因造成的服务中断或不能满
  • 语义分割方法总结与综述

    语义分割论文 Dilated convolution low level high level information fusion 2019 CVPR DFANet Deep Feature Aggregation for Real Ti
  • 2207 字符串中最多数目的子字符串(递推)

    1 问题描述 给你一个下标从 0 开始的字符串 text 和另一个下标从 0 开始且长度为 2 的字符串 pattern 两者都只包含小写英文字母 你可以在 text 中任意位置插入一个字符 这个插入的字符必须是 pattern 0 或者
  • Axios请求使用XML格式进行请求

    第一次接触xml格式请求 因为我们公司要对接其他公司的平台 需要用XML格式进行请求 才可以打通内网访问 在网上查了好多资料也没明白这个格式怎么使用 试了多次 发现用模板字符串将请求内容包裹进去就可以使用 废话不多说 直接上代码 此处是请求
  • PL/SQL 动态Sql拼接where条件

    完整例子 DECLARE SQLSTR VARCHAR 200 SELECT FROM hr employees where 1 1 TYPE EMPCURTYP IS REF CURSOR V EMP CURSOR EMPCURTYP E
  • shell的文本处理( grep / sed / awk / find)

    1 grep文本过滤明令 全面搜索研究正则表达式并显示出来 grep 命令是一种强大的文本搜索工具 根据用户指定的 模式 对目标文本进行匹配检查 打印匹配到的行 由正则表达式或者字符及基本文本字符所编写的过滤条件 1 grep的格式 gre
  • 网络切片技术缺点_中国联通携手紫光展锐发布首款5G网络切片技术

    出品 搜狐科技 编辑 张雅婷 11月9日 中国联通携手紫光展锐发布全球首款支持完整3GPP标准化网络切片和eSIM的5G CPE VN007 据了解 CPE全称为客户终端设备 是适用于家里的一种微基站 不需要有线进户即可享受到高速上网体验的
  • 谷粒商城-启动renren-fast-vue

    关于启动renren fast vue 为了启动这个 这两天都快搞疯了 本人没搞过前端 所以很费劲 资料 包含node js10 16 3与python2 7 2 链接 https pan baidu com s 1CLSNkiQhMgtM
  • arXiv上传文章注意事项

    1 注册 不忍吐槽arxiv的注册过程 密码有格式要求 而且一旦输错了 得从头填一遍密码和验证码 唯一需要注意的是 如果想要后续用这个账号上传文章 一定记得用自己的 edu邮箱注册 edu cn自然也可以 因为非edu邮箱注册的账号 在上传
  • Java架构直通车——过滤器和拦截器使用

    文章目录 过滤器和拦截器的区别 Filter过滤器 Interceptor拦截器 过滤器和拦截器的区别 规范不同 Filter是Servlet规范中定义的 是Servlet容器支持的 而拦截器是Spring容器内的 是Spring框架支持的
  • 龙书D3D11章节习题答案(第五章)

    以下答案仅供参考 有错欢迎留言 Chapter 5 The Rendering Pipeline 1 Construct the vertex and index list of a pyramid 金字塔 as shown in Figu
  • Qt 解决用QLineEdit实现的输入框开始没有光标在闪烁的问题

    在项目中遇到new出来QLineEdit在开始时 没有光标在闪烁 此时需要重写QlineEdit 代码如下 h文件 class CLineEidt public QLineEdit Q OBJECT public CLineEidt QWi
  • 大数据技术——用户与组管理

    一 实验目的 1 了解linux用户和组 2 熟练掌握liunx用户和组的基本操作 3 进一步了解linux系统 二 实验内容 1 用户账号的添加 删除与修改 2 用户口令的管理 3 用户组的管理 三 实验原理或流程 Linux系统是一个多
  • QT两种方法实现定时器

    方法一 1 重写虚函数 void timerEvent QTimerEvent e 2 启动定时器 返回值为定时器id 参数为定时间隔 单位为毫秒 int startTimer int interval 代码 widget h ifndef