2
votes

The following code:

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" }
        }
   }

Give the following error:

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

the line on error is Shortcut: "Ctrl+O". The Qt documentation give example like this. What am I missing?

edit: added documentation link. edit 2: updated imports

1
please show imports and point to the link of the docs you indicate in your questioneyllanesc
@eyllanesc updates with linksJack
And the imports of the qml?eyllanesc
@eyllanesc sorry, added nowJack

1 Answers

1
votes

In qml there are at least 2 groups of controls:

  • Qt Quick Controls 1
  • Qt Quick Controls 2

These groups have components with the same one that is the cause of your error since you try to apply the property of the MenuItem from one group to another (check the imports so that you realize the error).

Depending on which group you want to use, there are different options:

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" }
    }
}

Possibly you are going to have a similar problem with styles so it is recommended that you read this answer where I point out that using namespace can be a solution if you want to combine components of both modules.

Note: QML is case sensitive, in the docs you indicate it indicates shortcut but you use Shortcut.