[英]Emit signal to update UI from thread
我在繼承自 QThread 的 class 中定義了一個新插槽:
class MyThread : public QThread
{
Q_OBJECT
public:
MyThread(QString fileName);
void run() override;
signals:
void addNewItem(int row, int col, QString text);
private:
QString fileName;
};
在對話框 class 中,我定義了在發出上述信號時應該調用的插槽。 此插槽更新 UI 上的小部件:
void Dialog::onAddNewItem(int row, int col, QString text)
{
ui->tableWidget->setItem(row, col, new QTableWidgetItem(text));
}
在對話框 class 的構造函數中,我創建了工作線程並將信號連接到插槽:
worker = new MyThread(filePath);
worker->run();
connect(worker, &MyThread::addNewItem, this, &Dialog::onAddNewItem);
在run()
function 中,我發出了addNewItem信號,但永遠不會調用onAddNewItem插槽。 這是為什么?
線程運行后,您已連接信號和插槽。
worker->run()
替換為worker->start()
。 一旦線程成功啟動, start
成員立即調用run
。worker = new MyThread(filePath);
connect(worker, &MyThread::addNewItem, this, &Dialog::onAddNewItem);
worker->start();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.