【发布时间】:2018-07-25 19:11:06
【问题描述】:
如果 QML 中的任何控件(通过QQuickWidget 加载)更改其值,我想在主 Qt 应用程序中获得通知。有CheckBox'es、ComboBox'es、SpinBox'es 和TextEditor's。
我目前的方法是为每个控件声明一个插槽(分别为onCheckedChanged、onCurrentIndexChanged、onValueChanged 和onTextChanged)并从它们那里调用mainApp.notifyMe(),mainApp 是一个指向父 Qt Widget 的链接传播到QML 在
QQmlEngine* engine = new QQmlEngine(this);
if (QQmlContext* cntx = engine->rootContext()) {
cntx->setContextProperty("mainApp", this);
}
notifyMe() 是 C++ 端的一个插槽。
但这需要使用相同代码的几十个函数,因为我有几十个控件。在 QML 中拥有一个或 4 个带有 notifyMe() 的函数将是理想的,这些函数可以连接到所有控件的值更改。
QML 中有没有办法创建这样的插槽并将其连接到多个对象的属性更改?
【问题讨论】:
-
对于特定于信号类型的代码将没有转义,即一个函数如何循环具有
onCurrentIndexChanged的所有控件并连接到插槽