假设我有一个带有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();
}

09-10 03:54