QT ui 当 MainWindow 从另一个 class 启动时不显示(不在主函数中)

QT ui not showing up when MainWindow initated from another class (not in the main function)

是否可以在 QT 中启动 MainWindow 对象并从另一个 class 调用 show 方法,例如在线程 class 构造函数中,然后在主窗口中创建线程对象函数并启动线程?它对我不起作用(ui 闪烁并立即消失)。有什么办法可以解决吗?如果没有,我如何从线程中控制按钮和其他东西。我如何通过交换数据在它们之间进行通信(线程和 ui class)?

我的程序是这样的。线程构造函数:

#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();
}

您可以这样做,但在此之前,您必须将 MainWindow 连接到线程对象。除了修改 GUI.

的 GUI 线程函数之外,您永远不应该从另一个线程调用

解决方案是使用 slots/signals。从线程到 UI 的所有通信总是通过槽和信号完成的。

下面举例:

在您的线程 class 中创建一个名为 mySignal();

的信号
class Thread {

...

signals:
  void mySignal();

... 
}

并在您的主窗口中创建一个插槽

class MainWindow {

...

public slots:
 void ShowWindow();

..

}

在您的 MainWindow class 中创建一个名为 showWindow() 的函数

void MainWindow::ShowWindow() {

this->show();

}

将线程连接到 MainWindow

connect(threadObject, &Thread::mySignal, this, &MainWindow::ShowWindow);

使用 emit mySignal();

从您的线程中调用插槽

PS: 您的应用程序应该是一个小部件应用程序而不是控制台。