我想要顯示一個消息框,它在main.qml(作爲高於所有其他組件的層)中實現。函數showMessage()
使QML消息框可見並設置文本。因此,main.qml中的代碼可能會顯示消息框,但其他組件(不在main.qml中)也應該能夠顯示消息框。爲其他組件調用根QML組件的功能
我的想法到目前爲止是創建具有這樣的功能displayMessage()
它調用根上下文的showMessage()
功能的C++ QML組分(→main.qml)。
mail.qml(根組件)
import QtQuick 1.0
// [...]
Rectangle {
id: main
function showMessage(text) {
// make a message area visible and set text
}
// [...]
// message box implementation
}
App.qml
import QtQuick 1.0
import MessageForwarder 1.0 // implemented in C++
// [...]
Rectangle {
id: anApp
MessageForwarder { id: mf } // ← Possible without this?
Component.onCompleted: mf.displayMessage("A message."); // show message
// [...]
}
是否有可能創造這樣一個靜態的功能,這將允許類似MessageForwarder.displayMessage("Foo")
,而不需要額外的MessageForwarder
組件實例?
還有其他方便的可能性在其他組件中使用showMessage()
嗎?
(也許類似Qt
全局對象?)
謝謝!
編輯:
我想我發現了一個很簡單的解決方案:由於QML是一個動態範圍的語言(→Qt Doc)和所有組件都嵌套在main.qml,這只是工作:
main.qml
import QtQuick 1.0
Rectangle {
id: main
QtObject {
id: messageBox
// nested for a more modular design
function showMessage(text) {
// make a message area visible and set text
}
}
// [...]
// message box implementation
}
App.qml
import QtQuick 1.0
Rectangle {
id: anApp
Component.onCompleted: messageBox.showMessage("A message.");
// [...]
}
感謝您的提示! – hiddenbit 2011-04-10 16:56:28