【发布时间】:2020-11-02 12:17:06
【问题描述】:
我得到了一个 QObject 形状的 QML 对象。使用->setProperty(..., ...) 我可以更改属性,但是如何在没有信号的情况下执行槽?
目前我在我的 C++ 类中声明了一个信号:
signals:
void testSignal();
QML 对象中的信号/槽:
signal executeTestFunc(); onExecuteTestFunc: {
testAnimation.start();
}
然后我把这两个连接起来:
QObject::connect(this, SIGNAL(testSignal()),
QmlObject, SIGNAL(executeTestFunc()));
但这并不干净,如我所见:
- 事实上这是奇怪的信号/信号连接。
- 我不想使用 SIGNAL/SLOT 机制,除非我必须这样做,因为性能和长代码。
有没有办法直接从QObject 执行QML onExecuteTestFunc();?
【问题讨论】:
-
slot 是一个常规函数,你可以像所有其他函数一样执行它。顺便说一句,
QObject::connect应该将插槽连接到信号,而不是信号到信号,可能你这里有错字。 -
@folibis,我知道信号应该连接到插槽,但我发现这是唯一的方法:-(。你能告诉我如何从 C++ 代码执行 QML 插槽然后信号/槽机制?
-
考虑到 QML 插槽是一个常规函数,您可以使用 QMetaObject::invokeMethod 从 C++ 调用它
-
@folibis 信号可以实际上连接到其他信号,并且有很好的用例。不要不使用 QMetaObject::invokeMethod 之类的东西从 C++ 调用到 QML。它可以工作,但会产生不灵活且不可维护的代码。你的 C++ 不应该知道你的 QML 的结构。
标签: c++ qt qml signals-slots