如何在 Qt Designer (1.3) 中创建上下文菜单?当然,我想在不编写一行代码的情况下创建它!
3 回答
您需要 Qt Designer 中的两个步骤和表单构造函数中的几行代码:
将
contextMenuPolicy
小部件的 设置为值ActionsContextMenu
。使用操作编辑器选项卡创建操作。
对于您在 Qt Designer 中创建的每个操作,在表单构造函数中添加如下一行:
ui->yourwidget->addAction(ui->youraction);
你唯一能做的就是设置 contextMenuPolicy 但我怀疑它是你正在寻找的。
我可以建议一种方法,该方法允许您手动编写几行通用代码,然后仅使用 Qt Creator 为表单上的任意数量的组件添加上下文菜单。例如,我们在表单上有三个组件:QLabel lbl1、QPushButton btn1 和 QTextEdit ed1。我们需要为它们中的每一个添加它自己的上下文菜单。去做这个:
- 将
myContextMenuHandler(QPoint)
插槽添加到窗体 (QMainWindow)。 - 在表单的 cpp 文件中,为此插槽编写以下代码:
void MainWindow::myContextMenuHandler(QPoint pt)
{
QMenu *mnu = ui->menuPopupMenus->findChild<QMenu *>("menu" + sender()->objectName());
if (mnu)
mnu->popup(dynamic_cast<QWidget *>(sender())->mapToGlobal(pt));
}
- 在窗体的菜单栏中添加一个顶级菜单项(title="PopupMenus" 和 name="menuPopupMenus"(名称由 Qt Creator 自动生成)。
- 为此菜单项创建三个子项:
- title="lbl1"(与我们的 QLabel 相同),name=menulbl1(自动生成)
- title="btn1" (和我们的 QPushButton 一样), name=menubtn1 (自动生成)
- title="ed1" (和我们的 QTextEdit 一样), name=menued1 (自动生成)
这些项目中的每一个都必须具有自己的子项目集,这些子项目将显示为相应组件的上下文菜单(例如,“lbl1”项目将具有“Item1”、“Item2”和“Item3”子项目;“btn1”- “项目 4”和“项目 5”;“ed1” - “项目 6”)。
- 将
customContextMenuRequested(QPoint)
lbl1、btn1 和 ed1 组件的信号连接到myContextMenuHandler(QPoint)
表单的插槽。 - 将
contextMenuPolicy
lbl1、btn1 和 ed1 组件的属性设置为“CustomContextMenu” - 将以下代码行添加到表单类构造函数中:
ui->menuPopupMenus->menuAction()->setVisible(false);
以上所有的动作(除了我们写代码的那两个)都可以在 Qt Creator 的设计模式下执行。为新组件添加新的上下文菜单不需要编写代码。此外,如有必要,不同的上下文菜单可以包含共享的 QAction。