是否可以在QT中启动MainWindow的对象并从另一个类调用show方法,例如在线程类构造函数中,然后在main函数中创建线程对象并启动线程?它对我不起作用(ui闪烁并立即消失)。有什么办法可以解决吗?如果没有,我如何控制线程中的按钮和其他东西。如何通过交换数据在它们(线程和ui类)之间进行通信?
我的程序看起来像这样。线程构造函数:
#include "mainwindow.h"
void thread::thread(){
MainWindow m;
m.show();
}
和主要功能:
int main(int argc,char *argv[]){
QApplication a(argc,argv);
thread t;
t.start();
return a.exec();
}
答案 0 :(得分:0)
您可以这样做,但在此之前您必须将MainWindow连接到线程对象。除了修改GUI的GUI线程函数之外,不应该从另一个线程调用。
解决方案是使用插槽/信号。从线程到UI的所有通信总是使用插槽和信号完成。
以下示例:
在Thread类中创建一个名为mySignal();
class Thread {
...
signals:
void mySignal();
...
}
并在MainWindow中创建一个插槽
class MainWindow {
...
public slots:
void ShowWindow();
..
}
在MainWindow类中创建一个名为showWindow()
的函数void MainWindow::ShowWindow() {
this->show();
}
将您的主题连接到MainWindow
connect(threadObject, &Thread::mySignal, this, &MainWindow::ShowWindow);
使用emit mySignal();
PS:您的应用程序应该是一个小部件应用程序而不是控制台。