【发布时间】:2023-12-12 14:15:01
【问题描述】:
我想显示一个消息框,它在 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 全局对象?)
谢谢!
编辑:
我想我找到了一个非常简单的解决方案:由于 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.");
// [...]
}
【问题讨论】: