GUI设计中经常为了不将界面卡死,会用到线程Thread,而作为GUI设计工具,Qt也提供了一个这样的类,即QThread。
QThread对象管理程序中的一个控制线程。线程QThread开始在run()中执行。默认情况下,run()通过调用exec()启动事件循环,并在线程内运行Qt事件循环。
也可以通过使用QObject::moveToThread()将工作对象移动到线程来使用它们。
比如Worker槽函数中的代码将在一个单独的线程中执行。但是,也可以自由地将Worker的槽函数连接到任何线程中任何对象的任何信号。由于一种称为排队连接的机制,跨不同线程连接信号和槽函数是安全的。
class Worker : public QObject
{
Q_OBJECT
public slots:
void doWork(const QString ¶meter) {
QString result;
/* ... here is the expensive or blocking operation ... */
emit resultReady(result);
}
signals:
void resultReady(const QString &result);
};
class Controller : pub