23

我想在 Qt 中有一个工具栏,其中包含 QActions 或 QToolbarButtons,它们附加了弹出菜单。通过创建 QMenu,将其添加到 QToolbarButton,然后将其添加到 QToolbar,我已经能够在代码中完美地做到这一点。我的问题是这应该能够完全在设计器中完成。

这就是我通过代码所做的,我想在 qt 设计器中定义按钮和菜单:
http://img402.imageshack.us/img402/7669/exmaple.png

我们想要用 qt 设计器做的是将代码与界面分离。例如,这意味着一个人可以设计表单的外观和组件,然后程序员可以接受并编写其背后的功能。如果工具栏和菜单必须由程序员设计,我们就无法非常有效地完成这一点。

对于许多应用程序来说,这似乎是一个相当普遍的要求,我看不出 Qt 是如何强制在代码而不是设计器中完成的。

如果有人对如何做到这一点有任何想法,也许我在 Qt 中遗漏了一些东西?

4

4 回答 4

42

Qt Designer 中的工具栏支持似乎有点不直观和有限。我不知道有任何方法可以将带有下拉操作的弹出菜单直接添加到 Qt 设计器中的工具栏。

您可以按如下方式添加按钮。首先,右键单击您的主窗口并选择“添加工具栏”,如果您还没有的话。这应该在主窗口顶部添加一个非常纤薄的工具栏(纤薄,因为它是空的)。

接下来,在动作编辑器中添加一个动作。它是 Qt Designer 的窗格之一,如果没有看到,请选择 View->Action Editor。您可以在此处创建新操作。

接下来,将动作拖到工具栏上,用触发动作的按钮填充它。

我知道你想要一个弹出菜单,但据我所知,这就是你可以用 Qt Designer 做的范围。似乎其他几个 也得出了相同的结论。

于 2012-05-26T22:23:24.507 回答
4

这有一个尴尬的技巧。您可以将所需的小部件放在 Qt Designer 中的特殊QWidget(或者说QFrame)上,然后将该小部件添加到代码中的工具栏。

添加到项目中一个名为的新 Qt 类,例如QMyToolbarItem,派生自QWidget(或任何适合的)。然后QMyToolbarItem.ui在 Qt 设计器中打开。向其中添加任何复杂的小部件。您可以QComboBox为弹出菜单使用或弹出按钮。(我已经提到这很尴尬)。保存。在代码中,您只需要将自定义小部件添加到QMainWindow的工具栏:

   ui.mainToolBar->addWidget(new QMyToolbarItem(this));

不要忘记QMyToolbarItem正确设置大小策略(例如将minimumSizeof设置QMyToolbarItem为所需值)。否则,工具栏上不会显示任何内容。

当然,只有当您不想将普通项目添加到工具栏时才可以。请注意,这样做会失去 QAction 模型的强大功能。

无论如何,它足够合理地将 UI 设计内容与代码分开,并为工具栏上的复杂小部件设计提供强大的功能。

最后,不要忘记考虑适当的模型视图模式,以有效地将 UI 逻辑与底层业务逻辑分开,如果您还没有这样做的话。

于 2013-02-11T14:21:46.500 回答
0

2021 v6.2 在学习这个框架和 qtDesigner 的 mac 上遇到了同样的事情。添加了菜单栏,但在运行时未显示。我尝试了上面的几个想法,它们都有效,但想添加启用菜单的 qtDesigner 方式。选择 QMenuBar 并向下滚动,确保已选中 nativeMenuBar。这与在 mainwindow.cpp 中使用 setNativeMenuBar(false) 手动设置此属性值相同;(但当然在两个地方都这样做是多余的)

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->menubar->setNativeMenuBar(false);
}
于 2021-12-12T19:12:48.613 回答
-1

在 Qt Creator 的左上方,当您设计 GUI 时,应该有一个框,其中包含“mainToolBar”和“menuBar”等内容。确保有类似的东西。然后,在 Qt Creator 窗口的底部,有一个由 Signals & Slots Editor 选项卡和 Action Editor 选项卡占据的空间。转到操作编辑器,然后选择新建操作选项。这将让您创建一个动作。这是你要找的吗?

于 2011-12-23T21:57:40.287 回答