一、sleep()
1、说明
这种方式使用简单,但是会阻塞线程,有界面时界面会卡死,一般在非GUI线程中使用
2、使用
在界面上放置一个PushButton,右击,选择”转到槽”,选择“clicked()”
#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搭配使用
1、说明
QTimer::singleShot(int(msec), &loop, SLOT(quit()));
创建一个事件循环,在msec毫秒之后,退出这个事件,相当于延迟了msec毫秒;
在子事件循环中,父事件循环仍然是可以执行的,所以不会堵塞线程。
2、使用
#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");
}
原文地址:https://blog.csdn.net/Viciower/article/details/134717855
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_16919.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。