main.qmlに(他のすべてのコンポーネントの上のレイヤーとして)実装されているメッセージボックスを表示したいと思います。この関数showMessage()
は、QMLメッセージボックスを表示し、テキストを設定します。したがって、main.qml内のコードでメッセージボックスを表示することは可能ですが、他のコンポーネント(main.qml内ではない)もメッセージボックスを表示できる必要があります。
displayMessage()
これまでの私の考えは、ルートコンテキストの関数を呼び出すshowMessage()
関数(→ main.qml )を持つC++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.");
// [...]
}