可以使用Qt的信号和槽机制来实现跨线程调用函数。可以将需要访问的成员变量或函数作为参数传递给线程对象,并在线程对象内部使用该参数来访问相应的成员变量或函数。例如,在主线程中创建RunScript线程对象,并将MainWindow指针作为参数传递给它:

RunScript* runscript = new RunScript(this);

然后,在RunScript类中定义一个成员变量来存储MainWindow指针,并在构造函数中初始化它:

class RunScript : public QThread
{
    Q_OBJECT
public:
    explicit RunScript(MainWindow *parent = nullptr);

private:
    MainWindow *m_mainWindow;
};

RunScript::RunScript(MainWindow *parent) : QThread(parent)
{
    m_mainWindow = parent;
}

然后,在RunScript类中使用m_mainWindow来访问MainWindow中的成员变量或函数:

void RunScript::run()
{
    // 使用m_mainWindow来访问MainWindow中的成员变量或函数
    m_mainWindow->updataState();
}

最后,在MainWindow类中使用connect函数将信号和槽连接起来:

connect(this, &MainWindow::setRunDatas, runscript, &RunScript::setRunDatas);

这样,当MainWindow发出setRunDatas信号时,RunScript中的setRunDatas函数就会被调用,并使用m_mainWindow来访问MainWindow中的成员变量或函数。

Qt 多线程调用函数崩溃:跨线程访问成员变量和函数的最佳实践

原文地址: https://www.cveoy.top/t/topic/nwDn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录