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

时间:2010-04-26 05:20:49

标签: qt4 contextmenu qt-creator qt-designer qt-contextmenu

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

3 个答案:

答案 0 :(得分:16)

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

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

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

  • 对于您在Qt Designer中创建的每个操作,请在表单构造函数中添加以下行:ui->yourwidget->addAction(ui->youraction);

答案 1 :(得分:0)

你唯一可以做的就是设置contextMenuPolicy,但我怀疑它是你正在寻找的。

答案 2 :(得分: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相同),name = menulbl1(自动生成)
    • title =“ btn1”(与我们的QPushButton相同),name = menubtn1(自动生成)
    • title =“ ed1”(与我们的QTextEdit相同),name = menued1(自动生成)

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

  • 将lbl1,btn1和ed1组件的customContextMenuRequested(QPoint)信号连接到格式为myContextMenuHandler(QPoint)的插槽。
  • 将lbl1,btn1和ed1组件的contextMenuPolicy属性设置为“ CustomContextMenu”
  • 将以下代码行添加到表单类构造函数中:
ui->menuPopupMenus->menuAction()->setVisible(false);

以上所有动作(我们编写代码的两个动作除外)都可以在Qt Creator的设计模式下执行。为新组件添加新的上下文菜单不需要编写代码。另外,如有必要,不同的上下文菜单可以包含共享的QAction。