QT在后台线程上启动

时间:2016-12-10 20:17:12

标签: c++ multithreading qt

我是QT的新手,需要在后台线程上运行一个进程但是我很难过:

        QApplication::setOverrideCursor(Qt::WaitCursor);
        window.connect();
        QCoreApplication::processEvents();
        QApplication::restoreOverrideCursor();
        window.show();

目前connect()函数阻止了UI,如何在不锁定UI的情况下等待它? connect()正在对服务器进行重新计算。

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点,例如创建一个QRunnable并在线程池中运行它,实现一个QThread,或者你可以在一个QtConcurrent::run的线程中运行你的方法,例如

auto future = QtConcurrent::run([&window] { window.connect(); })

返回QFuture对象是一个句柄,可用于等待线程完成,如果函数返回某些内容则检索结果等。

旁注:由于QMainWindow / QWidget是从QObject派生的,并且QObject :: connect存在各种重载,因此重命名connect方法可能是个好主意。