【发布时间】:2014-07-22 10:21:56
【问题描述】:
这是我的代码:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
testApp w;
w.show();
TestClass *test = new TestClass;
QObject::connect(w.ui.pushButton, SIGNAL(clicked()), test, SLOT(something()));
return a.exec();
}
TestClass.h
class TestClass: public QObject
{
Q_OBJECT
public slots:
void something()
{
TestThread *thread = new TestThread;
thread -> start();
}
};
TestThread.h
class TestThread: public QThread
{
Q_OBJECT
protected:
void run()
{
sleep(1000);
QMessageBox Msgbox;
Msgbox.setText("Hello!");
Msgbox.exec();
}
};
如果我这样做,我会看到错误
小部件必须在 gui 线程中创建
我做错了什么?请帮我。我知道我不能在另一个线程中更改 gui,但我不知道 qt 中的构造。
【问题讨论】:
-
您可以使用
signal/slot机制。在主线程中创建消息框,当您想要显示来自线程的消息时,使用您想要显示的消息从它“发出”一个信号。看看here(虽然是4.8版本)
标签: c++ multithreading qt qmessagebox