【发布时间】:2024-01-15 15:18:01
【问题描述】:
我曾经有一个窗口的这种排列方式,其中有一个文本字段,并使用从 c++ 发出的数据进行更新:
Window{
id: root
function qmlSlot(a){
_textField1.text=a;
}
TextField{
id: _textField1
}
}
绑定是这样的:
QQuickWindow *window=qobject_cast<QQuickWindow*>(topLevel);
QObject::connect(src,SIGNAL(someSignal(QVariant)),window,SLOT(qmlSlot(QVariant)));
现在我在主窗口中添加了更多内容(选项卡),但事情不再那么简单了。
A:当我将qmlSlot 留在窗口范围内时,它看不到_textField1:
Window{
id: root
function qmlSlot(a){
_textField1.text=a;
}
TabView{
Tab{
TextField{
id: _textField1
}
}
}
}
这给了我:
qrc:/main.qml:32: ReferenceError: _textField1 is not defined
B:当我将槽本身移动到_textField1的范围内时,我不知道如何从c++中绑定到它:
Window{
id: root
TabView{
Tab{
function qmlSlot(a){
_textField1.text=a;
}
TextField{
id: _textField1
}
}
}
}
导致:
QObject::connect: No such slot QQuickWindowQmlImpl_QML_21::qmlSlot(QVariant)
如何在访问嵌套项时从 c++ 调用 qmlSlot(在这种情况下为 _textField)?是否可以让我在决定更改窗口布局时不必更改绑定代码?
【问题讨论】:
标签: c++ scope qml signals-slots qt-signals