我希望使用QThread構建我的Qt應用程序,因爲我想將長進程窗體MainWindow分隔爲線程。Qt線程兩個參數
我在此代碼已經一個問題:
class Worker : public QObject
{
Q_OBJECT
public slots:
void doWork(const std::string ¶m2, std::string ¶m2) {
int result;
/* ... here is the expensive or blocking operation ... */
emit resultReady(result);
}
signals:
void resultReady(const int &result);
};
class Controller : public QObject
{
Q_OBJECT
QThread workerThread;
public:
Controller() {
Worker *worker = new Worker;
worker->moveToThread(&workerThread);
connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater);
connect(this, &Controller::input,&Controller::output, worker, &Worker::doWork);
connect(worker, &Worker::resultReady, this, &Controller::handleResults);
workerThread.start();
}
~Controller() {
workerThread.quit();
workerThread.wait();
}
public slots:
void handleResults(const int &);
private:
string input;
string output;
};
我希望我的代碼可以將兩個值(輸入,輸出)字符串的QThread和作爲結果發出的信號爲int值。但是,列出的代碼不起作用。我在.Net中尋找解決方案看起來像blackgroundWorker,並且具有類似的功能。
我應該這樣做嗎?
編輯
我不能編譯這一點。我得到了錯誤:
Severity Code Description Project File Line Suppression State
Error C2664 'QMetaObject::Connection QObject::connect(const QObject *,const char *,const char *,Qt::ConnectionType) const': cannot convert argument 2 from 'std::string Controller::* ' to 'const char *' GPCTool C:\repo\Tool\Controller.cpp 21
究竟你「不上班」的意思是什麼不編譯?它會崩潰嗎?它會產生意外的結果嗎? – SingerOfTheFall
我收到了錯誤代碼,我在編輯 – Lisek
中寫到了,好像你的第二個'connect'參數太多了,不是嗎? – SingerOfTheFall