我想在Qt中有一个包含QActions或QToolbarButtons的工具栏,它们附有弹出菜单.通过创建QMenu,将其添加到QToolbarButton然后将其添加到QToolbar,我已经能够在代码中完美地完成此操作.我的问题是,这应该可以在设计师中完全完成.
这是我通过代码完成的工作,我想在qt designer中定义按钮和菜单:
我们想要用qt设计器做的是将代码与接口分开.例如,这意味着一个人可以设计表单的外观和组件,然后程序员可以采用它并编写其背后的功能.如果工具栏和菜单必须由程序员设计,我们无法非常有效地完成此任务.
对于许多应用程序来说,这似乎是一个相当常见的要求,我无法看到Qt如何强制在代码而不是设计器中完成此操作.
如果有人对如何做到有任何想法,也许我在Qt中遗漏了一些东西?
我在一个项目中工作,我需要自动打开(显示或弹出)QMenuBar中的项目.
假设我有下一个菜单栏:
File Edit Help
-op1 -op1 -op1
-op2 -op2 -op2
Run Code Online (Sandbox Code Playgroud)
要设置一个动作(显示与该动作相关的菜单),我使用:
menuBar->setActiveAction(mymenuactionpointer);
Run Code Online (Sandbox Code Playgroud)
据我所知,我可以使用以下其中一个来获取指向QMenuBar元素的指针列表:
QMenuBar::actions();
Run Code Online (Sandbox Code Playgroud)
要么
QList<Object*> lst1 = QMenuBar::findChildren<QObject*>();
QList<Object*> lst2 = QMenuBar::findChildren<QAction*>();
Run Code Online (Sandbox Code Playgroud)
当我使用QMenuBar::findChildren<QAction*>()
或者MenuBar::actions()
我在菜单栏中获得菜单列表时,我的意思是,我"File, Edit, Help"
从我的QMenuBar获得,在这种情况下QList的大小是3.
当我使用时,QMenuBar::findChildren<QObject*>()
我得到了一个大小为6的QObject列表,它是菜单栏中正确的项目数.但是,我已经尝试过演员QAction*
QAction *a = (QAction *)lst1.at(0);
QAction *a = qobject_cast<QAction*>(lst1.at(0));
QAction *a = dynamic_cast<QAction*>(lst1.at(0));
Run Code Online (Sandbox Code Playgroud)
在所有这些情况下a
不是NULL,但是当我尝试获取动作名称时,QAction::title()
它总是导致我的分段错误.
我一直在搜索,我发现在获取菜单栏操作列表后,可以询问QAction::menu()
(如果项目是菜单则返回有效的QMenu指针),以了解该项目是否为QMenu,如果是,则可以重复获取该菜单的操作列表,并继续迭代.但这对我不起作用,我期待这一点
QList<Object*> lst2 = QMenuBar::findChildren<QAction*>();
Run Code Online (Sandbox Code Playgroud)
每个元素"文件,编辑帮助" QAction::menu()
返回一个有效的菜单指针,所以我可以得到每个菜单的动作列表,但这对我来说根本不起作用.
我非常感谢您的时间和帮助,我希望这个问题可以帮助更多人.我真的很难过.
提前致谢.
我怎样才能让我的qmenu可以检查?
from PyQt4 import QtGui
app = QtGui.QApplication([])
menu = QtGui.QMenu()
menu.addAction('50%')
menu.addAction('100%')
menu.addAction('200%')
menu.addAction('400%')
menu.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud) 首先,我有一个QWidget
s 列表,我不知道运行时的长度.然后我创建了一个QListWidget
我显示它们的位置,当有人点击它们时,我使用信号currentItemChanged(QListWidgetItem*, QListWidgetItem*)
来捕获它并获得被点击项目的索引.
现在我想做一个类似的事情QMenu
.当QMenu
它及其动作构建时我会知道列表,但是我将无法对其进行硬编码.
如何根据菜单列表中的操作位置(索引)创建操作,捕获信号并将它们连接到同一个插槽,这些插槽会执行不同的操作?必须有一些方法来解决这个问题,因为其他应用程序使用它.我试着看一下映射,但我无法理解如何使用它.
我试图抓住sender
插槽,但无法从中获取任何有用的信息.
我正在尝试使用Qt Designer为我的QMenu添加一个图标,但是当我添加了图标时,我意识到我的文本消失了.我有什么方法可以在我的文字旁边显示我的图标吗?
我创建一个文本编辑器,我想放QComboBox
的QMenu
.我没有在QMenu
处理这样的事情中找到任何方法.最接近的是QMenu::addAction()
.我想知道绕过这个障碍.
谢谢!
我希望能够显示QMenu
项目的工具提示QAction
.我所取得的最好成绩就是将一个悬停的信号连接QAction
到一个QTooltip
节目:
connect(action, &QAction::hovered, [=]{
QToolTip::showText(QCursor::pos(), text, this);
});
Run Code Online (Sandbox Code Playgroud)
问题是有时程序会将工具提示定位在菜单下方,特别是在更改菜单时.
有没有办法强制工具提示显示在顶部?
我已经建立了QMenu MainMenu
我的上顶MainWindow
在我的应用程序.每个人都习惯了,我有以下QMenu
主菜单:
文件 - 编辑 - SuperHeavyExpertMenus - 设置 - 帮助
我想SuperHeaverExpertMenus
在程序启动时最初隐藏子树,因为它会包含很多设置,这可能会使初学者用户感到困惑.
例如,我想SuperHeavyExpertMenu
在"设置"中的复选框为真时显示该子树.
我可以隐藏孩子QActions
的的QMenu
上述S,争夺QAction:setVisible(false)
.但我能做到这一点QMenu
吗?
有没有办法隐藏QMenu
?
我需要创建一个更改QWidget背景的菜单.我想将一个代表所选颜色的QIcon放入填充QMenu的QActions中.我不想弹出Photoshop并手动绘制图标.是否可以编写一个充满特定颜色的简单图标?这样我可以根据需要进行任意数量的QActions,而且我不需要在Photoshop中制作一大堆图标.\
我试图在QMenuBar上模拟鼠标点击QMenu项目,例如使用QTestLib框架单击"另存为"QAction.
我在Windows XP 32位和Qt 5.0.2下使用它.
有任何想法吗?