QT Qthread 使用
时间: 2023-07-11 13:03:08 浏览: 101
在 Qt 中使用 QThread 实现多线程可以分为以下步骤:
1. 创建一个继承自 QThread 的子类,重写其 run() 方法,该方法将在新的线程中执行。
2. 在子类中定义信号和槽,以便在主线程和子线程之间进行通信。
3. 在主线程中创建子线程对象,并使用 start() 方法启动线程。
4. 在主线程中使用 connect() 方法将子线程的信号与主线程的槽连接起来,以实现跨线程通信。
以下是一个简单的示例:
```c++
#include <QThread>
#include <QDebug>
class MyThread : public QThread
{
Q_OBJECT
signals:
void mySignal(QString message);
protected:
void run() override {
qDebug() << "Thread started";
emit mySignal("Hello from thread");
qDebug() << "Thread finished";
}
};
class MyClass : public QObject
{
Q_OBJECT
public slots:
void mySlot(QString message) {
qDebug() << "Received message:" << message;
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MyThread thread;
MyClass obj;
QObject::connect(&thread, &MyThread::mySignal, &obj, &MyClass::mySlot);
thread.start();
return a.exec();
}
#include "main.moc"
```
在这个例子中,我们定义了一个 MyThread 类,它继承自 QThread,重写了 run() 方法,并定义了一个 mySignal 信号。我们还定义了一个 MyClass 类,它有一个名为 mySlot 的槽,用于接收 MyThread 发出的信号。在 main() 函数中,我们创建了一个 MyThread 对象和一个 MyClass 对象,并使用 connect() 方法将 mySignal 信号连接到 mySlot 槽。然后,我们调用 start() 方法来启动线程。当 run() 方法被执行时,它将发出 mySignal 信号,并传递一个字符串参数。这个信号将被发送到主线程,并调用 mySlot 槽来处理它。最后,我们调用 a.exec() 来启动 Qt 的事件循环,以便在主线程中接收信号和执行槽函数。
阅读全文