如何使用Qt自定义AppMenu

问题描述 投票:0回答:2

我正在为 macOS 开发 Qt 应用程序。

如何将项目添加到menuApp?我的意思是出现在苹果图标右侧菜单栏上的条目。

如何在 Qt 中实现这一目标?

我使用的是Qt 5.9。 Qt 小部件。

menuApp 是Apple 在每个应用程序中默认放置的菜单。在所附的图像中,它对应于一个显示“Finder”的菜单条目:

macos qt qt5 menubar
2个回答
1
投票

根据菜单角色的QT文档,简短的答案是:将QMenu项

menuRole
QAction
设置为文档中列出的预定义角色,或常规
QAction::TextHeuristicRole
。有些角色是根据菜单文本自动分配的,但除此之外,您必须自己完成。

您可以通过编程方式执行此操作,也可以使用 ui 编辑器执行此操作。以下是 QT Creator 中 ui 编辑器中的一些图像,正在编辑我的 mainwindow.ui 文件。我有一些通用的“常规”QMenu,它不应该是可见的,在它下面的 QAction 元素是

About
,它是自动提取的并放在 menuApp 下,因为它的名称与预定义的角色匹配。对于不匹配任何预定义角色的“检查更新”QAction,我已手动将其属性
menuRole
设置为
ApplicationSpecificRole
,这样它也放在 menuApp 下:

mainwindow.ui menu bar showing entries in QT Creator

mainwindow.ui menu role selection in QT Creator

resulting app menu, where about menu was auto attributed and check for updates was manually configured


1
投票

创建菜单栏:https://doc.qt.io/qt-5/qmenubar.html.

对于想要使用 qml 的人,只需这样做:

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import Qt.labs.platform 1.1 // comment this import to show menu in your app

ApplicationWindow {
    width: 640
    height: 480
    visible: true
    title: "Simple Test"
    color: "#fff"


    MenuBar {
        id: menuBar

        Menu {
            id: fileMenu
            title: qsTr("File")
            MenuItem { text: qsTr("&New...") }
        }

        Menu {
            id: editMenu
            title: qsTr("&Edit")
            // ...
        }

        Menu {
            id: viewMenu
            title: qsTr("&View")
            // ...
        }

        Menu {
            id: helpMenu
            title: qsTr("&Help")
            // ...
        }
    }
}

文档:https://doc.qt.io/qt-5/qml-qt-labs-platform-menubar.html

不要忘记添加Widgets(在Qt +=或find_package等设置中)和QApplication(在main.cpp中)。

© www.soinside.com 2019 - 2024. All rights reserved.