如何在Qt Designer(1.3)中创建上下文菜单?当然,我想用写一行代码来创建它!
您需要在Qt Designer中执行两个步骤,并在表单构造函数中执行几行代码:
将小部件的contextMenuPolicy
设置为值ActionsContextMenu
。
使用动作编辑器选项卡创建动作。
对于您在Qt Designer中创建的每个动作,在表单构造函数中放置如下一行:ui->yourwidget->addAction(ui->youraction);
您唯一可以做的就是设置contextMenuPolicy,但我怀疑这就是您想要的。
我可以建议一种方法,该方法允许您手动编写几行常规代码,然后仅使用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)
的插槽。ui->menuPopupMenus->menuAction()->setVisible(false);
以上所有动作(我们编写代码的两个动作除外)可以在Qt Creator的设计模式下执行。为新组件添加新的上下文菜单不需要编写代码。同样,如有必要,不同的上下文菜单可以包含共享的QAction。