有没有一种在Qt Designer中定义带有按钮和弹出菜单的QToolbar的方法?

26

我希望在Qt中有一个工具栏,其中包含附加了弹出菜单的QActions或QToolBarButtons。我已经能够通过创建QMenu、将其添加到QToolbarButton并将其添加到QToolbar来在代码中完美地实现这一点。但我的问题是,这应该可以完全在设计器中完成。

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

我们希望使用qt设计师将代码与界面分离。例如,这意味着一个人可以设计表单的外观和组件,然后程序员可以采取这个并编写其背后的功能。如果工具栏和菜单必须由程序员设计,我们无法有效地完成这项任务。

看起来这似乎是许多应用程序的常见需求,我看不出Qt如何强制要求在设计师而非代码中完成此操作。

如果有人对如何完成此操作有任何想法,请告诉我,也许我在Qt中遗漏了什么?

4个回答

48

在Qt Designer中,工具栏的支持似乎有些不直观和有限。我不知道如何直接在Qt Designer中向工具栏添加带下拉操作的弹出式菜单。

您可以按以下方式添加推按钮。首先,在主窗口上右键单击,然后选择“添加工具栏”(如果您还没有),这将在主窗口顶部添加一个非常窄的工具栏(因为空白而很窄)。

接下来,在“动作编辑器”中添加一个操作。它是Qt Designer的一个面板,如果您看不到,请选择“视图”->“动作编辑器”。您可以在此创建新操作。

接下来,将操作拖动到工具栏中,以使用触发操作的推按钮填充它。

我知道您想要一个弹出式菜单,但据我所知,这就是您可以在Qt Designer中做的全部。似乎已经有一些人得出了相同的结论


2
我很惊讶这个优秀的答案还没有被设置为“答案”。 - ExpatEgghead
更新:截至Qt Designer 4.8.5,似乎仍然没有一种方法可以为像QToolButton这样的按钮包含上下文菜单。至少在Qt Designer或Qt Designer文档中没有任何提示。 - Trilarion
很棒的答案。我从未意识到操作可以拖动到工具栏。 - Eric
首先,右键单击您的主窗口,然后选择“添加工具栏”。 - Timothy L.J. Stewart

4

有一个奇怪的技巧可以解决这个问题。你可以在Qt Designer中将想要的小部件放在一个特殊的QWidget(或者说QFrame)上,在代码中将该小部件添加到工具栏中。

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

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

不要忘记适当设置QMyToolbarItem的大小策略(例如将QMyToolbarItemminimumSize设置为所需值)。否则,在工具栏上什么也不会显示。

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

无论如何,这样做合理地将UI设计与代码分离,并且能够非常好地控制工具栏上复杂小部件的设计。

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


0

2021 v6.2 在 Mac 上学习该框架和 qtDesigner 时遇到了同样的问题。添加菜单栏但在运行时未显示出来。我尝试了几个以上的想法,它们都起作用,但我想添加 qtDesigner 启用菜单的方法。选择 QMenuBar 并向下滚动,确保选中 nativeMenuBar。这与在 mainwindow.cpp 中手动设置此属性值 setNativeMenuBar(false)是相同的(但当然在两个地方都这样做是冗余的)

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

-1
在Qt Creator的左上角,当你设计GUI时,应该有一个包含"mainToolBar"和"menuBar"等内容的框。确保有类似的东西存在。然后,在Qt Creator窗口的底部,有一个由Signals & Slots Editor标签和Action Editor标签占据的空间。进入Action Editor,并选择New Action选项。这将让你创建一个动作。 这是你想要的吗?

你如何使用它来创建菜单?我无法将操作“拖放”到工具栏中的其他操作下面,也没有其他方法可以做到这一点。 - Matthew Read

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接