添加菜單,我有以下代碼:錯誤QML
import QtQuick 2.4
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2
import QtQuick.Controls 1.4
ApplicationWindow {
title: qsTr("Hello World!")
width: 640
height: 480
visible: true
menuBar: MenuBar {
id: menuBar
}
MouseArea
{
anchors.fill: parent
onClicked: { menuBar.menus.addItem("test") }
}
}
當我運行它,然後單擊,出現以下消息:
qrc:/main.qml:19: TypeError: Property 'addItem' of object [object Object] is not a function
這是爲什麼?
編輯:從https://stackoverflow.com/users/24283/timday 獲取建議我這樣做:
import QtQuick 2.4
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2
import QtQuick.Controls 1.4
ApplicationWindow {
title: qsTr("Hello World!")
width: 640
height: 480
visible: true
menuBar: MenuBar
{
id: menuBar
function addMenu(text)
{
var newObject = Qt.createQmlObject('import QtQuick.Controls 1.4; Menu { id: test; title: "Test" }',
menuBar, "dynamicSnippet1");
newObject.visible = true
}
}
MouseArea
{
anchors.fill: parent
onClicked: { menuBar.addMenu("Test") }
}
}
但是,我不能讓菜單顯示。
編輯:由於這似乎是不可能做我想做的,我結束了timday的建議:
import QtQuick 2.4
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2
import QtQuick.Controls 1.4
ApplicationWindow {
title: qsTr("Hello World!")
width: 640
height: 480
visible: true
menuBar: MenuBar
{
id: menuBar
Menu { id: menu00; visible: false; }
Menu { id: menu01; visible: false; }
Menu { id: menu02; visible: false; }
Menu { id: menu03; visible: false; }
Menu { id: menu04; visible: false; }
Menu { id: menu05; visible: false; }
Menu { id: menu06; visible: false; }
Menu { id: menu07; visible: false; }
Menu { id: menu08; visible: false; }
Menu { id: menu09; visible: false; }
Menu { id: menu10; visible: false; }
Menu { id: menu11; visible: false; }
Menu { id: menu12; visible: false; }
Menu { id: menu13; visible: false; }
Menu { id: menu14; visible: false; }
Menu { id: menu15; visible: false; }
Menu { id: menu16; visible: false; }
Menu { id: menu17; visible: false; }
Menu { id: menu18; visible: false; }
Menu { id: menu19; visible: false; }
property variant topMenus: [ menu00, menu01, menu02, menu03, menu04,
menu05, menu06, menu07, menu08, menu09,
menu10, menu11, menu12, menu13, menu14,
menu15, menu16, menu17, menu18, menu19 ]
property int currMenu: 0
function addMenu(text)
{
if (currMenu == topMenus.length)
console.log("Index out of range")
else
{
var menu = topMenus[currMenu]
menu.visible = true
menu.title = text
currMenu++
return menu
}
}
}
MouseArea
{
anchors.fill: parent
onClicked: { menuBar.addMenu("Test") }
}
}
請提供完整的工作代碼,無需依賴或可阻止執行的內容。 – BaCaRoZzo
呃? *完全正常工作(直到您點擊)QML代碼; Qt5.5 qmlscene運行它就好了。 – timday
我根據BaCaRoZzo進行了修改,現在它已完全正常工作(但出現錯誤)。感謝BaCa。 – chila