簡體   English   中英

發出信號以從線程更新 UI

[英]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插槽。 這是為什么?

線程運行后,您已連接信號和插槽。

  1. worker->run()替換為worker->start() 一旦線程成功啟動, start成員立即調用run
  2. 連接信號和插槽如下:
worker = new MyThread(filePath);
connect(worker, &MyThread::addNewItem, this, &Dialog::onAddNewItem);
worker->start();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM