1

我的 Qt 应用程序有一个奇怪的问题。我有一个QMainWindow,方便MainWindow

以下代码适用于该main()函数:

int main(int argc, char *argv[])

{
    ..
    MainWindow mainWindow;
    mainWindow.show();
    ..
}

但是,以下内容根本不显示 MainWindow:

int main(int argc, char *argv[])
{
    AnotherClass::staticFunction();
}


class AnotherClass: public QObject {
Q_OBJECT
public:
    static void staticFunction();
}

void AnotherClass::staticFunction() {
    MainWindow mainWindow;
    mainWindow.show();
    return ;
}
4

2 回答 2

2

哦,我的坏!这是因为 main 永远不会返回并进入 exec 循环。但是,由于我的函数立即返回,因此窗口被破坏了。更改MainWindow mainWindow;MainWindow* mainWindow = new MainWindow(); 解决我的问题:

于 2012-07-13T06:33:18.833 回答
1

在这段代码中

void AnotherClass::staticFunction() {
    MainWindow mainWindow;
    mainWindow.show();
    return ;
}

关闭后实例mainWindow将超出范围},然后销毁。您必须在堆上分配它new才能使其存活staticFunction()

void AnotherClass::staticFunction() {
    MainWindow * mainWindow = new MainWindow;
    mainWindow->show();
    return ;
}

您还需要以某种方式跟踪指针并在delete以后使用它(可能使用智能指针)。

当然,您必须有一个QApplication并调用exec()它才能启动主事件循环。

于 2012-07-13T06:34:12.370 回答