Qt开辟一个线程执行对应的函数,并传递参数
时间: 2023-11-27 11:49:19 浏览: 30
在Qt中开辟一个新线程可以使用QThread类。而要传递参数可以使用信号与槽机制。
以下是一个示例代码:
```cpp
class MyThread : public QThread
{
Q_OBJECT
signals:
void resultReady(int result);
private:
int m_data;
public:
MyThread(int data) : m_data(data) {}
protected:
void run() override {
// 执行耗时操作
int result = doWork(m_data);
// 发送信号,通知主线程操作已经完成
emit resultReady(result);
}
private:
int doWork(int data) {
// 执行耗时操作,例如计算
int result = data * 2;
return result;
}
};
class MyObject : public QObject
{
Q_OBJECT
public slots:
void handleResult(int result) {
// 处理结果
}
public:
void startThread(int data) {
MyThread* thread = new MyThread(data);
connect(thread, &MyThread::finished, thread, &MyThread::deleteLater);
connect(thread, &MyThread::resultReady, this, &MyObject::handleResult);
thread->start();
}
};
```
在上面的代码中,我创建了一个MyThread类,继承自QThread,重写了run()函数,用于执行耗时操作。在执行完成后,通过信号resultReady()通知主线程操作已经完成,并传递计算结果。
同时,我还创建了一个MyObject类,用于启动MyThread线程,并处理结果。在startThread()函数中,我创建了一个MyThread对象,并连接了相关的信号和槽。然后,启动线程。
这样,在主线程中调用MyObject的startThread()函数,就可以在新线程中执行对应的函数,并传递参数了。