在 QT 中链接对话框的最佳方式是什么?

What's the best way to chain Dialogs in QT?

在我的应用程序中,我有一个项目功能,但它需要一系列对话框才能工作。

开始时,用户必须打开一个现有项目或创建一个新项目,并且在创建新项目时,用户必须指定一个文件夹。

因此,第一个对话框用于在新项目或现有项目之间进行选择,如果是新项目,另一个对话框会打开 select 个文件夹。

现在,我在第一个对话框上调用 exec_() 方法,并在其中执行所有操作(创建第二个对话框、使用它等)。直接后果:它很混乱,因为它使用了副作用。

所以问题是:可以在 QT 中干净地链接对话框吗?

看看 QWizard clas:

A wizard (also called an assistant on Mac OS X) is a special type of input dialog that consists of a sequence of pages. A wizard's purpose is to guide the user through a process step by step. Wizards are useful for complex or infrequent tasks that users may find difficult to learn.

我觉得 "state machine" 是你的朋友。

http://www.drdobbs.com/cpp/state-machine-design-in-c/184401236 https://en.wikipedia.org/wiki/Automata-based_programming

  1. 在您的情况下,您将从 运行 对话 1 的初始状态启动状态机。
  2. 你 运行 对话框 1,当它 returns 来自 exec() 时,确定并 将您的机器更新到新状态。
  3. 然后 运行 新状态的相应对话框。依此类推,直到到达对话链结束的状态。

这允许您在对话链中具有灵活性,其中下一个对话取决于用户在上一个对话中选择的内容,同时将状态逻辑保持在对话之外并位于中心位置。

它基本上是 while 循环中的一个 switch 语句,但是对于管理程序中的非线性/条件流非常有用。

希望对您有所帮助。