Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QMainWindow从main()函数打开,但不从任何其他函数打开_C++_Qt_Qmainwindow - Fatal编程技术网

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

C++ QMainWindow从main()函数打开,但不从任何其他函数打开,c++,qt,qmainwindow,C++,Qt,Qmainwindow,我的Qt应用程序有一个奇怪的问题。我有一个QMainWindow,方便地MainWindow 以下代码通过main()函数工作: int main(int argc, char *argv[]) { .. MainWindow mainWindow; mainWindow.show(); .. } 但是,对于以下内容,根本不显示主窗口: int main(int argc, char *argv[]) { AnotherClass::staticFun

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

以下代码通过
main()
函数工作:

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

{
    ..
    MainWindow mainWindow;
    mainWindow.show();
    ..
}
但是,对于以下内容,根本不显示主窗口:

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

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

在此代码中

void AnotherClass::staticFunction() {
    MainWindow mainWindow;
    mainWindow.show();
    return ;
}
实例
main窗口
将在关闭
}
后超出范围,然后被销毁。您必须使用
new
在堆上分配它,以使其比
staticFunction()更长寿

您还需要以某种方式跟踪指针,然后让它
delete
d(可能使用智能指针)


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

我认为您需要运行QCoreApplication::exec();虽然
staticFunction
本身是静态的,但它内部的
main窗口
变量不是静态的,所以一旦您从函数返回,该变量就超出了范围。谢谢各位,我刚才已经弄明白了!)我认为这不是一个非常优雅的解决方案。您正在创建内存泄漏。@李斯特先生,这就是为什么我说他需要跟踪指针并在以后删除它。我同意它不是那么优雅,我会将
mainWindow
作为
main()
中的局部变量,或者作为
QApplication
子类中的成员变量(如果它是一个复杂的应用程序,我可以有不同的主窗口)。我正在重写
closeEvent
方法,并破坏其中的窗口。@TarandeepGill如果您只打算这样做一次,那么在程序退出之前删除资源是没有意义的(您只会减慢退出的速度)。“泄漏”某些单个应用程序实例(如主窗口)是可以的。不。。。我正在重写
closeEvent
方法,并销毁其中的窗口。好的,您应该提到这一点。顺便说一下,您可以设置WA_DeleteOnClose属性,该属性将处理这个问题。
void AnotherClass::staticFunction() {
    MainWindow * mainWindow = new MainWindow;
    mainWindow->show();
    return ;
}