Qt/C++ 显示内联对话框的技巧

Qt/C++ Technique To Show Inline Dialog

我有用于 Mac 的 QtCreator 5.5,使用 C++,我是新手。我有一个 MainForm window。我想在其中显示一个对话框,但在它自己的 UI 设计器中单独绘制它。然后,在运行时,我的代码将拉出另一个 UI 并将其显示在 window.

假设有一个主应用程序 window。您单击一个按钮,您需要看到一个确认对话框。通常你可以用一个单独的 window 来做到这一点。相反,我希望它在运行时是内联的,以便像主 window.

上的小部件一样显示它

当然,我可以在小部件中现有 window 的顶部绘制我的对话框,但这违背了我希望能够在其自己的设计器 window 中调整它的地步,并且当我需要它时,只需在主 window 中根据需要加载它。

QtCreator 和 C++ 中的技术是什么?

  1. 打开 QtCreator。这个任务只能通过那里完成。

  2. 假设您有一个常规的 Qt Widget 应用程序,您只需在 QWidget 上添加一个控件 MainWindow的centralWidgetUI Designer.

  3. 下一步,在UI设计器中单击编辑,然后右键单击表格。选择添加新...

  4. 在打开的对话框中,选择 Qt > Qt Designer Form Class,然后单击 选择...

  5. Select Widget 然后使用其余的默认值。这将创建一个名为 Form 的小部件,并且 form.hform.cpp 也将添加到您的项目中。

  6. 现在找到 form.ui 并在 Qt Designer 中打开它。在 QWidget 窗体上添加 Stacked Widget Control。将其调整为与父小部件相同的大小。接下来,在 Stacked Widget Control 的 第一个 页面 上粘贴一个 Label Control。这个标签将是临时的,只是为了证明这是有效的。您会将其设置为 "Testing" 的文本。现在关闭设计器。

  7. 翻回 UI 文件 Main Window,找到您添加的 QWidget 并右键单击它。选择 提升... 并出现一个对话框。在该对话框中,将 Promoted Class Name 设置为 Form,然后将 Header File 设置为form.h。将其他所有内容保留为默认值并单击 添加,然后单击 提升

  8. 您可能希望在 Main Window 中立即看到 QWidget 中的变化您之前添加的。然而,不幸的是,这不是它的工作原理。您只能在运行时看到更改。所以,现在你应该 运行 你的应用程序在 Qt Creator 中。当它运行时,您会看到您的小部件现在包含您创建的 form.ui 组件的内容。

  9. 现在,有趣的地方来了。您现在可以在 form.ui 上绘制所有内联模式对话框,只需将它们放在 Stacked Widget 控件的不同 页面 上。您还可以设置小部件的属性,使 QWidget 容器的背景不透明且黑暗(创建背景调光器),然后在运行时调整 的大小QWidgetMain Window 的大小。当您需要切换到不同的对话框时,您可以在 StackedWidget 项上使用 setCurrentWidget()setCurrentIndex(),如下所示:

QStackedWidget *w = ui->widget->findChild<QStackedWidget *>("stackedWidget");
w->setCurrentIndex(1);

在那个例子中,我的 MainWindow 上有一个 QWidget 控件,名称简单 widget。然后我在它上面找到了名为 stackedWidget 的控件。获得它后,我在其上使用 setCurrentIndex(x) 方法更改该小部件的页面以显示我需要的那个。请记住,这是一个从零开始的索引。因此,(1) 将是第 2 页。

QMainWindow::setCentralWidget

在您的 QMainWindow 构造函数中添加:

MyDialogClass myDialog = new MyDialogClass();
setCentralWidget(myDialog);