我想在Qt中有一个工具栏,其中包含QActions或QToolbarButtons,有弹出菜单附加到他们。我已经能够在代码中完美地做到这一点,方法是创建一个QMenu,将其添加到QToolbarButton,然后将其添加到QToolbar。我的问题是,这应该能够完全在designer中完成。
这是我通过代码完成的工作,我想在qt设计器中定义按钮和菜单:
我们想要用qt设计器做的是将代码从界面中分离出来。例如,这意味着一个人可以设计窗体的外观和组件,然后程序员可以使用它来编写其背后的功能。如果工具栏和菜单必须由程序员设计,我们就不能非常有效地实现这一点。
对于许多应用程序来说,这似乎是一个相当普遍的需求,我不明白Qt怎么会强迫在代码中而不是在设计器中完成这一点。
如果有人对如何做到这一点有任何想法,也许我在Qt中遗漏了一些东西?
发布于 2012-05-27 06:23:25
Qt设计器中的工具栏支持似乎有点不直观和有限。我不知道有什么方法可以将带有下拉菜单的弹出菜单直接添加到Qt Designer的工具栏中。
您可以添加按钮,如下所示。首先,右击你的主窗口并选择"Add Toolbar",如果你还没有的话。这应该会在主窗口的顶部添加一个非常纤细的工具栏(纤细是因为它是空的)。
接下来,在action Editor中添加一个操作。这是Qt Designer的一个窗格,如果没有看到,请选择View->Action Editor。您可以在此处创建新操作。
接下来,将操作拖到工具栏中,用触发操作的按钮填充它。
我知道你想要一个弹出式菜单,但据我所知,这是你可以用Qt Designer做的事情。看起来several others也得出了同样的结论。
发布于 2013-02-11 22:21:47
这里有一个很别扭的把戏。您可以将所需的小部件放在Qt Designer中的特殊QWidget
(或者,比如说QFrame
)上,然后将该小部件添加到代码中的工具栏中。
添加到项目中一个新的Qt类,命名为QMyToolbarItem
,派生自QWidget
(或其他任何组件)。然后在Qt设计器中打开QMyToolbarItem.ui
。向其中添加任何复杂的小部件。您可以使用QComboBox
或弹出按钮来显示弹出菜单。(我已经提到这很尴尬)。省省吧。在代码中,您只需要将自定义小部件添加到QMainWindow
的工具栏中:
ui.mainToolBar->addWidget(new QMyToolbarItem(this));
不要忘记正确设置QMyToolbarItem
的大小策略(例如,将QMyToolbarItem
的minimumSize
设置为所需的值)。否则,工具栏上不会显示任何内容。
当然,只有当你不想将普通的项目添加到工具栏时,这才是可以的。请注意,这样做会失去QAction模型的强大功能。
无论如何,它合理地将UI设计与代码分离,并在工具栏上提供了对复杂小部件设计的良好支持。
最后,不要忘记考虑适当的Model View patterns来有效地将UI逻辑与底层业务逻辑分离,如果您还没有这样做的话。
发布于 2021-12-12 19:12:49
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);
}
https://stackoverflow.com/questions/6740770
复制相似问题