我大约两周前开始用Qt 5.7制作GUI应用程序。
直到今天我已经做了一个21点游戏,一个基本的迷你加密程序和1-2个更多的程序。现在,我可以找到任何帮助,如何使一个应用程序,实际上就像一个设置向导-我的意思是,例如,通过点击下一步,一个标签或任何元素都消失了,新的出现像一个进度条,并在复制的内容下面。这到底是怎么做到的呢?
是像 on_pushButton_clicked()
这样的东西,然后像ui->pushButton->hide();
和其他元素一样隐藏起来,或者它实际上是通过用其他元素和功能"重建"窗口而制作的?
编辑:Mike的评论揭示了QWizard
和QWizardPage
的存在,这使得我的回答相当多余,除非你有超过这些小部件能力的需求-或者只是想自己实现所有东西- OP已经回复说他们确实想尝试。对于其他人,你可能只需要在你需要或想要的时候继续读下去!
一种方法是,在每个页面之后销毁窗口的旧内容(子部件),然后在下一个页面中重新填充它。
但在我看来,这并不理想:这是一种浪费,它将要求你反复破坏/重建事物,并伴随着所有需要的跳跃,以支持后退/下一步/跳转到页面#按钮以及不同页面之间的所有路径。这就需要更多的编程和更多的资源来保持不必要的拆除和重建。
你关于隐藏的另一个想法更好,我知道这个工作的确切容器!有了这个,你可以提前构建一切,而不需要反复删除/添加子节点来更改页面(就像你使用QGridLayout
一样)。
- 给你的窗口一个单独的子容器类
QStackedWidget
。此容器接受多个子部件,但每次只显示一个。所以: - 为向导的每个页面添加子容器。
- 用该页所需的小部件填充每个子页面。
- 将每个页面中的按钮等连接到信号以执行所需的操作…
- …特别是你的后退/下一步(和跳跃,或其他)按钮。设置这些,以便它们通过使用插槽
setCurrentIndex()
来更改QStackedWidget
的活动子节点。
通过这种方式,您可以在显示窗口之前构建所有页面的整个堆栈。然后,当你准备好了,你就把它展示出来,一切都准备好了。你的信号,所有正确连接,将照顾其他一切:页面之间的变化,验证输入,显示标签或打开对话框警告丢失的信息,等等。