我的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 ;
}
答案 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()
才能启动主要事件循环。