分配 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 快捷方式。
以下代码:
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 快捷方式。