我在RPI3上使用Qt。 我找到了一个QML例子,它是Tesla Car仪表盘。您可以访问here或here的完整代码。
我成功创建了一个项目并对其进行了调试。现在我试图从C ++端更改QML代码中的值。每30秒我的C ++代码中有一个计时器我试图使用QMetaObject::inokeMethod():
函数更改QML代码中的速度值。我在here中阅读了所有示例。
这是我的C ++代码
#ifndef MYTIMER_H
#define MYTIMER_H
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlComponent>
#include <QTimer>
#include <QtDebug>
class MyTimer : public QObject
{
Q_OBJECT
public:
MyTimer();
QTimer *timer;
int i=0;
public slots:
void MySlot();
};
#endif // MYTIMER_H
#include "mytimer.h"
MyTimer::MyTimer()
{
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(MySlot()));
timer->start(10000);
}
void MyTimer::MySlot()
{
i++;
if(i==3)
{
i=0;
QQmlEngine engine;
QQmlComponent component(&engine,QUrl(QStringLiteral("qrc:/Speedometer.qml")));
QObject *object = component.create();
QVariant speeds=100;
QVariant returnedValue;
QMetaObject::invokeMethod(object,"speedNeedleValue",
Q_RETURN_ARG(QVariant, returnedValue),
Q_ARG(QVariant, speeds));
qDebug() << "From QML"<< returnedValue.toString();
delete object;
}
}
这是QML代码:
import QtQuick 2.4
import QtGraphicalEffects 1.0
Rectangle {
color: "transparent"
SpeedNeedle {
id: speedoNeedle
anchors.verticalCenterOffset: 0
anchors.centerIn: parent
focus: true
Keys.onPressed: {
if (event.key == Qt.Key_A) {
speedNeedleValue(100)
drive()
}
}
function speedNeedleValue(speeds) {
speedoNeedle.value = speeds
return ": I am here"
}
}
如果我按下&#34; A&#34;按钮我的speedNeedleValue();
功能正在运行。在调试页面中,我可以获得返回数据return ": I am here"
。
问题是我无法使用invoke函数设置speeds
参数。
这是调试页面:
&#34; https://preview.ibb.co/kqpvWS/rpi.png&#34;
每次中断我都能得到&#34;我在这里&#34;。但我也得到了#34; JIT被禁用....&#34;警告也是。
谢谢你的回答。