【发布时间】:2020-05-30 15:11:08
【问题描述】:
我在继承自 QThread 的类中定义了一个新插槽:
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;
};
在 Dialog 类中,我定义了在发出上述信号时应该调用的槽。此插槽更新 UI 上的小部件:
void Dialog::onAddNewItem(int row, int col, QString text)
{
ui->tableWidget->setItem(row, col, new QTableWidgetItem(text));
}
在 Dialog 类的构造函数中,我创建了工作线程并将信号连接到插槽:
worker = new MyThread(filePath);
worker->run();
connect(worker, &MyThread::addNewItem, this, &Dialog::onAddNewItem);
在run() 函数中,我发出addNewItem 信号,但永远不会调用onAddNewItem 槽。这是为什么呢?
【问题讨论】:
-
扑通一声.....把
worker->run();改成worker->start(); -
通过调用
worker->run();,您将在与 GUI 线程相同的线程中执行。connect(worker, &MyThread::addNewItem, this, &Dialog::onAddNewItem);发生在 run() 完成之后,所以不要指望得到你的信号。