当前位置: 首页 > article >正文

7、Qt延时的使用

一、说明

平时用到两种延时方式QThread::sleep()和QTimer::singleShot()

1、QThread::sleep()

QThread类中如下三个静态函数:

QThread::sleep(n); //延迟n秒

QThread::msleep(n); //延迟n毫秒

QThread::usleep(n); //延迟n微妙

这种方式使用简单,但是会阻塞线程,有界面时界面会卡死,一般在非GUI线程中使用

2QTimer::singleShotQEventLoop搭配使用

QEventLoop loop;

QTimer::singleShot(int(n), &loop, SLOT(quit()));

loop.exec();

创建一个事件循环,在n毫秒之后,退出这个事件,相当于延迟了n毫秒;

在子事件循环中,父事件循环仍然是可以执行的,所以不会堵塞线程。

二、sleep()使用

新建一个Qt项目

 在界面上放置一个PushButton,右击,选择”转到槽”,选择“clicked()”

更改.cpp中的代码如下

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QTime>
#include <QThread>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

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

void MainWindow::on_pushButton_clicked()
{
    qDebug() << QTime::currentTime().toString("hh:mm:ss");
    QThread::sleep(10);
    qDebug() << QTime::currentTime().toString("hh:mm:ss");
}

运行程序,点击“PushButton”,输出框输出当前时间,在十秒之内拖拽界面,是无法拖拽的,标题栏提示“未响应”

十秒之后,输出框又输出一个当前时间信息,此时界面可以随意拖拽了

三、QTimer::singleShot与QEventLoop搭配使用

更改(二)中的代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QTime>
#include <QTimer>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

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

void MainWindow::on_pushButton_clicked()
{
    qDebug() << QTime::currentTime().toString("hh:mm:ss");

    QEventLoop loop;
    QTimer::singleShot(int(1000*10), &loop, SLOT(quit()));
    loop.exec();

    qDebug() << QTime::currentTime().toString("hh:mm:ss");
}

运行程序,点击“PushButton”,输出框输出当前时间,可以随意拖拽界面

十秒之后,输出框又输出一个当前时间信息


http://www.kler.cn/a/157683.html

相关文章:

  • 解决 Xshell 无法使用 root 账户远程登录 Linux 的问题
  • ffmpeg格式转换 免费使用视频格式转换教程
  • visual studio 2022中使用vcpkg包管理器
  • Java架构师技术架构路线
  • PTA 7-226 sdut-C语言实验-矩阵输出(数组移位)
  • Mysql内联接inner join以后数据条数比原数据表多
  • 小白备战蓝桥杯:Java常用API
  • 【Wireshark工具使用】Wireshark无法抓取TwinCAT的EtherCAT包(已解决)
  • 【Windows】永久屏蔽系统更新
  • 【滑动窗口】LeetCode2953:统计完全子字符串
  • python-单词本|通讯录
  • 构建高效预约系统:预约系统源码的设计与实现
  • HTTPS的安全问题及应对方案
  • GPIO的使用--时钟使能含义--代码封装
  • MYSQL练题笔记-高级查询和连接-简单题3题
  • 杨辉三角
  • 『亚马逊云科技产品测评』活动征文|基于亚马逊EC2云服务器安装Prometheus数据可视化监控
  • 【问题】C++ libcurl实现PUT时阻塞问题
  • 公有云迁移研究——AWS Route53
  • Windows使用Redis