1. Qt中的进程与线程基础概念
在Qt开发中,理解进程和线程的区别是构建高效应用程序的基础。进程是操作系统进行资源分配和调度的基本单位,每个进程拥有独立的内存地址空间。而线程则是进程内的执行单元,多个线程共享同一进程的资源。
Qt应用程序启动时默认运行在主线程(也称为GUI线程)中。这个线程负责处理所有用户界面交互和事件循环。如果在主线程中执行耗时操作,会导致界面冻结,这就是为什么我们需要使用工作线程。
重要提示:在Qt中,所有与用户界面相关的操作都必须在主线程中执行,这是Qt框架的硬性规定。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Qt线程的三种创建方式
2.1 继承QThread重写run方法
这是最传统的线程创建方式,通过继承QThread类并重写其run()方法来实现:
cpp复制class WorkerThread : public QThread {
Q_OBJECT
protected:
void run() override {
// 在这里执行耗时操作
for(int i=0; i<100; i++) {
qDebug() << "Working in thread" << QThread::currentThreadId();
QThread::msleep(100);
}
}
};
// 使用方式
WorkerThread *thread = new WorkerThread;
thread->start();
这种方式的优点是简单直接,但缺点是run()方法中的代码与线程生命周期强耦合,不够灵活。
2.2 使用moveToThread方法
这是Qt推荐的方式,将QObject派生类对象移动到新线程中:
cpp复制class Worker : public QObject {
Q_OBJECT
public slots:
void doWork() {
// 耗时操作
for(int i=0; i<100; i++) {
qDebug() << "Working in thread" << QThread::curr
