【发布时间】:2018-06-20 04:17:01
【问题描述】:
我在 qml 中有一个计时器(在 StackView 中查看),我尝试从 C++ 代码开始,调用 javascript 函数。但我的计时器永远不会被触发。我究竟做错了什么?我的流程是 a.qml -> b.qml(点击按钮)
文件 b.qml:
Item {
function connectionConfirmed() {
myTimer.start()
console.log("started timer")
}
Timer {
interval: 1000; running: false; repeat: false
id: myTimer
onTriggered: {
console.log("timer triggered")
}
}
}
文件 main.qml:
ApplicationWindow {
id: root
visible: true
width: 320
height: 530
StackView {
id: stackView
initialItem: "qrc:/a.qml"
anchors.fill: parent
}
}
文件a.qml
MouseArea{
anchors.fill: parent
onClicked: {
stackView.push("qrc:/b.qml")
}
}
C++部分:
connect(&myObjectInstance, &X::somethingHappend, this, [this](){
QQmlComponent component(&engine_, "qrc:/b.qml");
QObject *obj = component.create();
QVariant returnedValue;
QMetaObject::invokeMethod(obj, "connectionConfirmed",
Q_RETURN_ARG(QVariant, returnedValue));
delete obj;
});
输出是:
started timer
当我尝试设置running: true定时器被触发时,是否意味着我无法从JS函数启动定时器?
【问题讨论】:
-
我通过使用 Button 调用 connectionConfirmed 函数测试了您的代码,它工作正常,我认为错误在您的代码的另一部分,请花点时间提供一个像样的minimal reproducible example跨度>