- 115
- 0
- 约8.62千字
- 约 18页
- 2018-06-03 发布于江西
- 举报
Qt之QThread(深入理解).doc
Qt之QThread(深入理解)
简述
为了让程序尽快响应用户操作,在开发应用程序时经常会使用到线程。对于耗时操作如果不使用线程,UI界面将会长时间处于停滞状态,这种情况是用户非常不愿意看到的,我们可以用线程来解决这个问题。
前面,已经介绍了QThread常用的两种方式:
Worker-Object
子类化QThread
下面,我们来看看子类化QThread在日常中的应用。
大多数情况下,多线程耗时操作会与UI进行交互,比如:显示进度、加载等待。。。让用户明确知道目前的状态,并对结果有一个直观的预期,甚至有趣巧妙的设计,能让用户爱上等待,把等待看成一件很美好的事。
子类化QThread
下面,是一个使用多线程操作UI界面的示例 - 更新进度条。与此同时,分享在此过程中有可能遇到的问题及解决方法。
定义一个WorkerThread类,让其继承自QThread,并重写run()函数,每隔50毫秒更新当前值,然后发射resultReady()信号(用于更新进度条)。
#include QThread
class WorkerThread : public QThread
{
Q_OBJECT
public:
explicit WorkerThread(QObject *parent = 0)
: QThread(parent)
{
qDebug() Worker Thread : QThread::currentThreadId();
}
protected:
virtual void run() Q_DECL_OVERRIDE {
qDebug() Worker Run Thread : QThread::currentThreadId();
int nValue = 0;
while (nValue 100)
{
// 休眠50毫秒
msleep(50);
++nValue;
// 准备更新
emit resultReady(nValue);
}
}
signals:
void resultReady(int value);
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
构建一个主界面 - 包含按钮、进度条,当点击“开始”按钮时,启动线程,更新进度条。
class MainWindow : public CustomWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0)
: CustomWindow(parent)
{
qDebug() Main Thread : QThread::currentThreadId();
// 创建开始按钮、进度条
QPushButton *pStartButton = new QPushButton(this);
m_pProgressBar = new QProgressBar(this);
//设置文本、进度条取值范围
pStartButton-setText(QString::fromLocal8Bit(开始));
m_pProgressBar-setFixedHeight(25);
m_pProgressBar-setRange(0, 100);
m_pProgressBar-setValue(0);
QVBoxLayout *pLayout = new QVBoxLayout();
pLayout-addWidget(pStartButton, 0, Qt::AlignHCenter);
pLayout-addWidget(m_pProgressBar);
pLayout-setSpacing(50);
pLayout-setContentsMargins(10, 10, 10, 10);
setLayout(pLayout);
// 连接信号槽
connect(pStartBut
您可能关注的文档
- 2014年高考英语3500词汇(个人一手信息绝对有用).doc
- 员工招聘管理的重要性(共篇).doc
- 工业行业国际垂直专业化程度的测算及分析.doc
- 演好自己的角色(字)作文.doc
- 魏光成《现代教育学》整体教学方案.doc
- 神经生物学家鞠躬的成长之路.doc
- 互联网创业项目如何做好天使轮融资[权威资料].doc
- 四川私募股权与企业上市(PEIPO).doc
- 四环医药目标绩效管理设计报告.doc
- g打造高绩效销售团队(页).doc
- 外商投资生产型企业注册问题解答[权威资料].doc
- 【成教学生自我职业生涯规划能力培养研究】职业生涯规划能力分析.doc
- 携手共进,共赢高考主题班会策划方案.doc
- 新时期高校财务管理面临的挑战与理念创新_论文.docx
- 对外经济贸易大学金融学专业信用管理与风险控制方向在职研究生课程班招生简章.doc
- 【最新word论文】企业员工职业生涯规划与发展【通信学专业论文】.doc
- Leader's relationship management network(领导者的关系管理网).doc
- 经销商如何与酒店终端打交道(The dealer how to deal with the terminal Hotel ).doc
- 主持会议技巧(精华).doc
- 雅思备考经验——首战.两个月从菜鸟变高手.docx
最近下载
- 一汽马六自动变速箱维修手册--工作.手册.doc VIP
- YBT 6073-2022钢铁企业油品净化循环利用技术规范.pdf VIP
- 房产过户合同8篇.docx VIP
- 深度解析(2026)《YBT 6073-2022钢铁企业油品净化循环利用技术规范》.pptx VIP
- 2025年江苏省机关事业单位工勤技能岗位技术等级考试(酒店服务·高级技师)历年参考题库含答案详解.docx VIP
- 深度解析(2026)《WST 433—2023静脉治疗护理技术操作标准》.pptx VIP
- T_CNAS 05-2019 化疗药物外渗预防及处理.docx VIP
- RB_T 303-2016养老服务认证技术导则.pdf
- 档案资料移交表.docx VIP
- 营养健康食堂建设指南.pdf VIP
原创力文档

文档评论(0)