Qt项目:文件拷贝项目

在桌面应用开发中,使用多线程能避免窗口卡顿,提高用户体验。Qt中的QThread用于创建子线程,主线程处理窗口事件,子线程执行后台逻辑。线程间通信需借助信号槽机制,且子线程不应操作窗口对象。文章提供了文件拷贝的线程处理示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础知识:

在进行桌面应用程序开发的时候,假设应用程序在某些情况下需要处理比较复杂的逻辑,如果只有一个线程去处理,就会导致窗口卡顿,无法处理用户的相关操作,这种情况下就需要使用多线程,其中一个线程处理窗口事件,其他线程进行逻辑运算,多个线程各司其职,不仅可以提高用户体验还可以提升程序的执行效率

在Qt中使用了多线程,有些事项是需要额外注意的:

1、默认的线程在Qt中称之为窗口线程,也叫主线程,负责窗口事件处理或者控件数据的更新

2、子线程负责后台的业务逻辑处理,子线程中不能对窗口对象做任何操作,这些事情需要交给窗口线程处理

3、主线程和子线程之间如果要进行数据的传递,需要使用Qt中的信号槽机制

//线程类QThread:
//Qt中提供了一个线程类,通过这个类可以创建子线程了
//构造函数
QTread::QTread(QObject * parent = Q_NULLPTR);
//判断线程中的任务是不是处理完毕了
bool QThread::isFinished()const;
//判断子线程是不是在执行任务
bool QThread::isRunning()const;
//在主线程中创建子线程对象,并调用start函数启动线程
void QThread::start(Priority priority = InheritPriority)[slot]
//优先级从低到高是
//QThread::IdlePriority
//QThread::LowestPriority
//QThread::LowPriority
//QThread::NormalPriority
//QThread::HighPriority
//QThread::HighestPriority
//QThread::TimeCriticalPriority
//QThread::InheritPriority
//线程退出,可能马上终止线程,一般不用
void QThread::terminate() [slot]
//退出线程
void QThread::exit(int returnCode = 0);
//等待任务完成,然后退出线程
bool QThread::wait(unsigned long time = ULONG_MAX);
//子线程要处理什么任务,需要写到run()中
void QThread::run() ;[virtual protected]
操作步骤:
//1、需要创建一个线程类的子类,让其继承Qt中的线程类QThread
class MyThread::public QThread
{
}
//2、重写父类的run()方法,在该函数内部编写子线程要处理的具体的业务流程
class MyThread::public QTread
{
protected:
void run()
{
}
}
//3、在主线程中创建子线程对象,new一个就可以了
MyThread * subThread=new MyThread;
//4、启动子线程,调用start()方法
subThread->start();

这个run()是一个虚函数࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值