我是QT的新手,我正在做一些学习.
我想触发一个从C++线程(目前是Qthread)修改GUI小部件的插槽.
不幸的是我得到了:ASSERTION失败了:Q_ASSERT(qApp && qApp-> thread()== QThread :: currentThread());
这是一些代码:
(MAIN + Thread类)
class mythread : public QThread
{
public:
mythread(mywindow* win){this->w = win;};
mywindow* w;
void run()
{
w->ui.textEdit->append("Hello"); //<--ASSERT FAIL
//I have also try to call a slots within mywindow which also fail.
};
};
int main(int argc, char *argv[])
{
QApplication* a = new QApplication(argc, argv);
mywindow* w = new mywindow();
w->show();
mythread* thr = new mythread(w);
thr->start();
return a->exec();
}
Run Code Online (Sandbox Code Playgroud)
窗口:
class mywindow : public QMainWindow …Run Code Online (Sandbox Code Playgroud) 我有情况,我QDialog从main.cpp文件打开窗口,然后我等待exec()方法返回基于成功或失败的QDialog.像这样 :
int main( ... ) {
LoginDialog *loginDlg = new LoginDlg;
if( loginDlg->exec() != Qt:;Accepted ) {
return 0;
}
//check the login Info
delete loginDlg;
MainWindow w;
w.show()
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
从Qt示例(地址簿)我看到我可以使用accept()和reject()插槽.问题是我喜欢基于某些功能流关闭的窗口,而不是ok/close按钮.如何从功能中触发这些插槽?.