【问题标题】:Is there a way to define a QToolbar with buttons and popup menus using Qt Designer?有没有办法使用 Qt Designer 定义带有按钮和弹出菜单的 QToolbar?
【发布时间】:2011-10-08 02:52:15
【问题描述】:

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

这是我通过代码完成的,我想在qt设计器中定义按钮和菜单:

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

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

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

【问题讨论】:

    标签: qt button designer qmenu qtoolbar


    【解决方案1】:

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

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

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

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

    我知道您想要一个弹出菜单,但据我所知,这就是您使用 Qt Designer 所能做的范围。看来severalothers也得出了同样的结论。

    【讨论】:

    • 我很惊讶这个出色的答案没有被设置为“答案”。
    • 更新:从 Qt Designer 4.8.5 开始,似乎还没有办法为 QToolButton 等按钮包含上下文菜单。至少在 Qt Designer 或 Qt Designer documentation 中没有任何建议。
    • 很好的答案。我从来没有意识到动作可以拖到工具栏上。
    • This --> "首先,右键单击您的主窗口并选择"添加工具栏""
    【解决方案2】:

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

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

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

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

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

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

    最后,别忘了考虑适当的Model View patterns 来有效地将 UI 逻辑与底层业务逻辑分开(如果您还没有这样做的话)。

    【讨论】:

      【解决方案3】:

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

      MainWindow::MainWindow(QWidget *parent)
          : QMainWindow(parent)
          , ui(new Ui::MainWindow)
      {
          ui->setupUi(this);
          ui->menubar->setNativeMenuBar(false);
      }
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 如何使用它来创建菜单?我无法在工具栏上的其他操作“下方”拖动操作,而且我看不到任何其他方法。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多