分配 MenuItem.Shortcut 给无效的附加对象分配

Assign MenuItem.Shortcut give Invalid attached object assignment

以下代码:

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.5
import QtQuick.Controls.Styles 1.4

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("This is my application title!")

    ColumnLayout
    {

        id: col1
        spacing: 2
  
        MenuBar
        {
            Menu {
                title: "File"
                MenuItem {
                    text: "Open"
                    Shortcut: "Ctrl+O"
                    onTriggered: console.log("Ctrl+O trigged")
                }
                MenuItem { text: "Paste link from Ctrl+V" }
                MenuItem { text: "Save log as" }
            }
            Menu {  title: "Help" }
            Menu {  title: "About" }
            Menu {  title: "Exit" }
        }
   }

报错如下:

qrc:/main.qml:25:21: Invalid attached object assignment

错误行是Shortcut: "Ctrl+O"。 Qt documentation 给出了这样的例子。我错过了什么?

编辑:添加了文档 link。 编辑 2:更新导入

qml中至少有2组控件:

  • Qt 快速控件 1
  • Qt 快速控件 2

这些组的组件具有相同的组件,这是导致错误的原因,因为您尝试将 MenuItem 的 属性 从一组应用到另一组(检查导入以便您意识到错误) .

根据您要使用的组,有不同的选项:

Qt QuickControls 1

import QtQuick 2.12

import QtQuick.Controls 1.4

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("This is my application title!")

    menuBar: MenuBar{
        Menu {
            title: "File"
            MenuItem {
                text: "Open"
                shortcut: "Ctrl+O"
                onTriggered: console.log("Ctrl+O trigged")
            }
            MenuItem{ text: "Paste link from Ctrl+V" }
            MenuItem { text: "Save log as" }
        }
        Menu {  title: "Help" }
        Menu {  title: "About" }
        Menu {  title: "Exit" }
    }
}

Qt QuickControls 2

import QtQuick 2.12

import QtQuick.Controls 2.12

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("This is my application title!")

    menuBar: MenuBar{
        Menu {
            title: "File"
            Action {
                text: "Open"
                shortcut: "Ctrl+O"
                onTriggered: console.log("Ctrl+O trigged")
            }
            Action { text: "Paste link from Ctrl+V" }
            Action { text: "Save log as" }
        }
        Menu {  title: "Help" }
        Menu {  title: "About" }
        Menu {  title: "Exit" }
    }
}

您可能会遇到类似的样式问题,因此建议您阅读 ,其中我指出,如果您想组合两个模块的组件,使用命名空间可能是一种解决方案。

注意: QML区分大小写,在文档中你指出它表示s快捷方式但你使用S 快捷方式。