如何在Qt Designer(1.3)中创建上下文菜单? 当然我想创建它而不用写一行代码!!
答案 0 :(得分:16)
您需要在Qt Designer中执行两个步骤,并在表单构造函数中使用几行代码:
将小部件的contextMenuPolicy
设置为值ActionsContextMenu
。
使用操作编辑器选项卡创建操作。
对于您在Qt Designer中创建的每个操作,请在表单构造函数中添加以下行:ui->yourwidget->addAction(ui->youraction);
答案 1 :(得分:0)
你唯一可以做的就是设置contextMenuPolicy,但我怀疑它是你正在寻找的。 p>
答案 2 :(得分:0)
我可以建议一种方法,该方法允许您手动编写几行常规代码,然后仅使用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的设计模式下执行。为新组件添加新的上下文菜单不需要编写代码。另外,如有必要,不同的上下文菜单可以包含共享的QAction。