【发布时间】:2010-04-26 05:20:49
【问题描述】:
如何在 Qt Designer (1.3) 中创建上下文菜单? 当然我想创建它而不写一行代码!
【问题讨论】:
标签: qt4 contextmenu qt-creator qt-designer qt-contextmenu
如何在 Qt Designer (1.3) 中创建上下文菜单? 当然我想创建它而不写一行代码!
【问题讨论】:
标签: qt4 contextmenu qt-creator qt-designer qt-contextmenu
在Qt Designer中需要两步,在表单构造函数中需要几行代码:
将小部件的contextMenuPolicy 设置为值ActionsContextMenu。
使用操作编辑器选项卡创建操作。
对于您在 Qt Designer 中创建的每个操作,在表单构造函数中添加如下一行:ui->yourwidget->addAction(ui->youraction);
【讨论】:
你唯一能做的就是设置 contextMenuPolicy 但我怀疑它是你要找的。p>
【讨论】:
我可以建议一种方法,该方法允许您手动编写几行通用代码,然后仅使用 Qt Creator 在表单上为任意数量的组件添加上下文菜单。例如,我们在表单上有三个组件:QLabel lbl1、QPushButton btn1 和 QTextEdit ed1。我们需要为它们中的每一个添加它自己的上下文菜单。为此:
myContextMenuHandler(QPoint) 槽添加到窗体(QMainWindow)。void MainWindow::myContextMenuHandler(QPoint pt)
{
QMenu *mnu = ui->menuPopupMenus->findChild<QMenu *>("menu" + sender()->objectName());
if (mnu)
mnu->popup(dynamic_cast<QWidget *>(sender())->mapToGlobal(pt));
}
这些项目中的每一个都必须有一组自己的子项目,这些子项目将显示为相应组件的上下文菜单(例如,“lbl1”项目将具有“Item1”、“Item2”和“Item3”子项目;“ btn1" - "Item4" 和 "Item5";"ed1" - "Item6")。
customContextMenuRequested(QPoint) 信号连接到表单的 myContextMenuHandler(QPoint) 插槽。contextMenuPolicy 属性设置为“CustomContextMenu”ui->menuPopupMenus->menuAction()->setVisible(false);
上面所有的动作(除了我们写代码的那两个)都可以在Qt Creator的设计模式下执行。为新组件添加新的上下文菜单不需要编写代码。此外,如有必要,不同的上下文菜单可以包含共享的 QActions。
【讨论】: