【问题标题】:Context Menu Creation with ‪ Qt Designer(Qt Creator IDE)使用 Qt Designer(Qt Creator IDE)创建上下文菜单
【发布时间】:2010-04-26 05:20:49
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • OP 声明“我当然想在不编写一行代码的情况下创建它!!”这不满足。
    • 如果他正在寻找字面上没有代码,那么他就在错误的地方。并且可能是在错误的职业生涯中。
    • 对不起,我必须把 ui->yourwidget->addAction(ui->youraction) 准确地放在哪里?谁是“ui”?我是 Python 新手
    【解决方案2】:

    你唯一能做的就是设置 contextMenuPolicy 但我怀疑它是你要找的。​​p>

    【讨论】:

    • 您能解释一下您的解决方案吗?
    • 简单地说,不可能。
    【解决方案3】:

    我可以建议一种方法,该方法允许您手动编写几行通用代码,然后仅使用 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的设计模式下执行。为新组件添加新的上下文菜单不需要编写代码。此外,如有必要,不同的上下文菜单可以包含共享的 QActions。

    【讨论】:

      猜你喜欢
      • 2014-10-22
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多