与QT的多个窗口
问题描述:
我是一名学生和我的论文我想创建一个基于问题的游戏;我想用QT来详细说明图形界面,但我从来没有使用它,我不知道如何创建一个具有多个窗口的应用程序。 有一个名为“Form”的基类(抽象)和三个从Form:MainMenuForm,LoginForm和GameForm继承的类。与QT的多个窗口
在一些我发现的例子中,窗口的布局设置好的在构造函数并在主调用的方法显示(),但我想这样做的主要:
// Creates a FormFactory object and ensures singleton instance
FormFactory * factory;
factory = factorySingleton.GetFactory();
//select a Form to display
int choice = 1;
Form * actualForm;
while (choice != 0)
{
factory->Init(choice);
actualForm = factory->ReturnActualForm();
choice = actualForm->Display();
}
显示方法对于每个派生窗体都是必须的,它必须返回一个int值,以指示哪个窗口显示(例如,MainMenuForm的Display方法返回2,如果用户想要继续登录窗口,则返回0,如果用户返回0想关闭应用程序);显然,Display方法也必须显示表单。
最后,我注意到,在所有的例子,他们写
return app.exec();
主的结束。
对于我的项目,我应该在哪里写app.exec()? while语句之前,之后或之内?
答
你的设计很糟糕。您引用的代码应该在调用app.exec()之前实例化的单独的类中。目前的解决方案只允许一次选择表单,它将被显示,当你关闭它时,程序结束。
阅读关于信号和插槽的Qt文档,以及如何编写Qt GUI应用程序,您需要一种不同的方法。
基本上在main()函数的末尾建立所有GUI元素 – glezmen 2014-08-28 13:41:06
将每个“Window”创建为不同的QWidget或QMainWindow,然后创建一个实例并在其上调用show()时希望它出现,例如按钮点击或其他东西 – AngryDuck 2014-08-28 15:33:47
任何没有父级的QWidget子类自动变成顶级窗口,当你show()它时。 'app.exec()'启动应用程序的实际事件循环。在此之前,没有可见的事情发生(呃,你*可以*创建对话框(但通常不应该)或显示一个启动窗口)。 – hyde 2014-08-28 17:49:42