Я хочу показать окно сообщения, которое реализовано в main.qml (как слой над всеми другими компонентами). Функция showMessage()
делает окно сообщения QML видимым и устанавливает текст. Таким образом, код в main.qml может отображать окна сообщений, но другие компоненты (кроме main.qml ) также могут отображать окна сообщений.
Моя идея на данный момент заключается в создании компонента C ++ QML, который имеет функцию displayMessage()
, которая вызывает функцию showMessage()
корневого контекста (→ 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
глобального объекта?)
Спасибо!
EDIT:
Мне кажется, я нашел довольно простое решение: поскольку 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.");
// [...]
}