假设我有一个带有GUI的Qt应用程序。我上面有一个按钮。当我单击该按钮时,程序将循环计算某些内容(使用OpenMP),然后使用一些GUI元素(文本框/标签/e.t.c)显示结果。
在这些计算过程中是否可以使应用程序可点击(避免压碎)?
最佳答案
使用QThread
(Qt文档:http://doc.qt.io/qt-5/qthread.html)类创建一个线程,该线程将执行您的计算。主线程将执行您的GUI应用程序,并且在计算过程中可以单击它。
您可以在文档中找到创建线程的简单示例:
class WorkerThread : public QThread
{
Q_OBJECT
void run() Q_DECL_OVERRIDE {
QString result;
/* ... here is the expensive or blocking operation ... */
emit resultReady(result);
}
signals:
void resultReady(const QString &s);
};
void MyObject::startWorkInAThread()
{
WorkerThread *workerThread = new WorkerThread(this);
connect(workerThread, &WorkerThread::resultReady, this, &MyObject::handleResults);
connect(workerThread, &WorkerThread::finished, workerThread, &QObject::deleteLater);
workerThread->start();
}