QMainWindow从main()函数打开,但不从任何其他函数打开

时间:2012-07-13 06:26:08

标签: c++ qt qmainwindow

我的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 ;
}

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

在此代码中

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

实例mainWindow将在结束}后超出范围,然后销毁。您必须使用new在堆上分配它,使其比staticFunction()更长。

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

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

当然,您必须拥有QApplication并在其上调用exec()才能启动主要事件循环。