封装qthread 线程类
时间: 2023-10-28 18:04:52 浏览: 83
线程封装类
QThread是Qt中的一个线程类,它可以方便地创建和管理线程,提供了线程安全的信号和槽机制。使用QThread可以将耗时的操作放在子线程中执行,避免阻塞UI线程,提高应用程序的响应速度。
下面是一个简单的封装QThread的线程类的示例:
```cpp
class MyThread : public QThread
{
Q_OBJECT
public:
explicit MyThread(QObject *parent = nullptr);
~MyThread();
signals:
void resultReady(const QString &result);
protected:
void run() override;
private:
// 声明需要在子线程中执行的函数
QString doSomething();
};
```
在上面的代码中,我们声明了一个名为MyThread的线程类,继承自QThread。我们重写了QThread的run()函数,该函数会在新线程中执行。我们还声明了一个信号resultReady,用于在子线程中发送结果。
在run()函数中,我们调用了一个名为doSomething()的函数,该函数是我们需要在子线程中执行的函数。在这个函数中,我们可以进行任何需要在子线程中执行的操作。
下面是MyThread类的实现:
```cpp
MyThread::MyThread(QObject *parent) : QThread(parent)
{
}
MyThread::~MyThread()
{
}
void MyThread::run()
{
QString result = doSomething();
emit resultReady(result);
}
QString MyThread::doSomething()
{
// 在子线程中执行的操作
}
```
在run()函数中,我们调用了doSomething()函数,并将结果通过resultReady信号发送出去。在doSomething()函数中,我们可以进行任何需要在子线程中执行的操作。
使用MyThread类的示例如下:
```cpp
// 创建MyThread实例
MyThread *myThread = new MyThread(this);
// 连接信号和槽
connect(myThread, &MyThread::resultReady, this, [](const QString &result){
// 处理结果
});
// 启动新线程
myThread->start();
```
在上面的代码中,我们创建了一个MyThread实例,然后连接了它的resultReady信号和一个Lambda表达式,用于处理结果。最后,我们启动了新线程。
阅读全文