首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法使用Qt Designer定义一个带有按钮和弹出菜单的QToolbar?

有没有办法使用Qt Designer定义一个带有按钮和弹出菜单的QToolbar?
EN

Stack Overflow用户
提问于 2011-07-19 07:47:37
回答 4查看 22.2K关注 0票数 22

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

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

我们想要用qt设计器做的是将代码从界面中分离出来。例如,这意味着一个人可以设计窗体的外观和组件,然后程序员可以使用它来编写其背后的功能。如果工具栏和菜单必须由程序员设计,我们就不能非常有效地实现这一点。

对于许多应用程序来说,这似乎是一个相当普遍的需求,我不明白Qt怎么会强迫在代码中而不是在设计器中完成这一点。

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

EN

回答 4

Stack Overflow用户

发布于 2012-05-27 06:23:25

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

您可以添加按钮,如下所示。首先,右击你的主窗口并选择"Add Toolbar",如果你还没有的话。这应该会在主窗口的顶部添加一个非常纤细的工具栏(纤细是因为它是空的)。

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

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

我知道你想要一个弹出式菜单,但据我所知,这是你可以用Qt Designer做的事情。看起来several others也得出了同样的结论。

票数 42
EN

Stack Overflow用户

发布于 2013-02-11 22:21:47

这里有一个很别扭的把戏。您可以将所需的小部件放在Qt Designer中的特殊QWidget (或者,比如说QFrame)上,然后将该小部件添加到代码中的工具栏中。

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

代码语言:javascript
运行
复制
   ui.mainToolBar->addWidget(new QMyToolbarItem(this));

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

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

无论如何,它合理地将UI设计与代码分离,并在工具栏上提供了对复杂小部件设计的良好支持。

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

票数 4
EN

Stack Overflow用户

发布于 2021-12-12 19:12:49

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

代码语言:javascript
运行
复制
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->menubar->setNativeMenuBar(false);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6740770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档