特定QML项目的上下文中发射信号I有两个QML项具有相同接口(信号发射和处理)和不同objectName
属性值:如何在从C++代码
Text {
id: the_first_item
objectName: "the_first_item"
signal ping();
onPing: {
text = "pong! (variant 1)"
}
}
Text {
id: the_second_item
objectName: "the_second_item"
signal ping();
onPing: {
text = "pong! (variant 2)"
}
}
欲在这些项目之一的背景下发出ping
信号。在QML我会做这种方式:
Item {
onSomething: the_first_item.ping()
}
的问题是,我想从C做++代码。我有一个指向QQuickItem
类的实例的指针,它使用findChild
方法和值objectName
属性检索。
用于处理信号的唯一的解决方案从我已经发现了C++代码触发是在其主体中定义其自己的QObject
衍生物,声明一个信号的方法,然后简单地调用它在这个类的一个实例的上下文中:
class SomeLogic : public QObject
{
public signals:
void ping();
public:
void doSth() { ping(); }
};
然后,把一个指针实例此类发动机的根上下文和连接处理这个信号在QML的方式如下:
Text {
id: the_first_item
//objectName: "the_first_item"
Connections {
target: the_instance_of_some_logic_property_name
onPing: {
text = "pong!"
}
}
}
但是,如果我理解正确的东西是不好的,因为如果the_second_item
的定义方式相同,它们都会处理发出的ping
信号,我只想触发其中的一个。
现在,当我写它,我认为,在每个项目可能提供一个效用函数,然后在自己的上下文发出ping
信号,这样的:
Text {
id: the_first_item
objectName: "the_first_item"
signal ping();
onPing: {
text = "pong!"
}
function emitPing() {
ping()
}
}
在simplier情况下, emitPing
就足够了(我不需要定义信号和处理程序 - 我只需在emitPing
函数中设置文本),但如果我理解正确,函数和信号之间的区别在于函数当信号异步时,调用是同步的nd由于某些原因(从QML启动但用C++处理的GUI状态之间的转换)我希望它是异步的。我也想避免必须在任何地方写出无所不能的emitPing
函数。
问题:有一种方法以发射ping
信号,从C++代码,在仅仅the_first_item
上下文?
非常感谢您的帮助:) –
这就是为什么我在这里:D – Felix