使用‪Qt Designer(Qt Creator IDE)创建上下文菜单

问题描述 投票:14回答:3

如何在Qt Designer(1.3)中创建上下文菜单?当然,我想用写一行代码来创建它!

qt4 contextmenu qt-creator qt-designer qt-contextmenu
3个回答
22
投票

您需要在Qt Designer中执行两个步骤,并在表单构造函数中执行几行代码:

  • 将小部件的contextMenuPolicy设置为值ActionsContextMenu

  • 使用动作编辑器选项卡创建动作。

  • 对于您在Qt Designer中创建的每个动作,在表单构造函数中放置如下一行:ui->yourwidget->addAction(ui->youraction);


0
投票

您唯一可以做的就是设置contextMenuPolicy,但我怀疑这就是您想要的。


0
投票

我可以建议一种方法,该方法允许您手动编写几行常规代码,然后仅使用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相同,name1 = menulbl1(自动生成)
    • title =“ btn1”(与我们的QPushButton相同,name1 = menubtn1(自动生成)
    • title =“ ed1”(与我们的QTextEdit相同),name1 = menued1(自动生成)

每个项目都必须具有自己的子项目集,这些子项目将显示为相应组件的上下文菜单(例如,“ lbl1”项目将具有“ Item1”,“ Item2”和“ Item3”子项目;“ btn1 “-” Item4“和” Item5“;” ed1“-” Item6“)。

  • 将lbl1,btn1和ed1组件的customContextMenuRequested(QPoint)信号连接到格式为myContextMenuHandler(QPoint)的插槽。
  • contextMenuPolicy属性设置为“ CustomContextMenu”
  • 将以下代码行添加到表单类构造函数中:
  • ui->menuPopupMenus->menuAction()->setVisible(false);
    以上所有动作(我们编写代码的两个动作除外)可以在Qt Creator的设计模式下执行。为新组件添加新的上下文菜单不需要编写代码。同样,如有必要,不同的上下文菜单可以包含共享的QAction。
  • © www.soinside.com 2019 - 2024. All rights reserved.