C++ 有没有办法有效地更新QML中的CAN数据?
目前,我正在使用C++ 有没有办法有效地更新QML中的CAN数据?,c++,qt,qml,C++,Qt,Qml,目前,我正在使用main.cpp文件中的socketcan API实时接收CAN数据 我在main.cpp中的一个变量中不断更新CAN的数据帧 我想通过将main.cpp中包含CAN数据帧的变量传递给QML动画量表来实时表示量表 我需要实时检测QML中包含CAN数据的变量的变化。我想知道是否有一个有效的方法 我尝试使用emit与QML共享数据。 但是,由emit在device->connect(device,&qcanbus设备::framesReceived,[device](){…}内部编写
main.cpp
文件中的socketcan API实时接收CAN数据
我在main.cpp
中的一个变量中不断更新CAN的数据帧
我想通过将main.cpp
中包含CAN数据帧的变量传递给QML动画量表来实时表示量表
我需要实时检测QML中包含CAN数据的变量的变化。我想知道是否有一个有效的方法
我尝试使用emit
与QML共享数据。
但是,由emit
在device->connect(device,&qcanbus设备::framesReceived,[device](){…}
内部编写的函数不起作用
当使用它时,我得到了错误
无法在此上下文中隐式捕获“this
”
我查了一下错误,但没有找到答案
if (QCanBus::instance()->plugins().contains(QStringLiteral("socketcan"))) {
qWarning() << "plugin available";
}
QString errorString;
QCanBusDevice *device = QCanBus::instance()->createDevice(
QStringLiteral("socketcan"), QStringLiteral("vcan0"), &errorString);
if (!device) {
qWarning() << errorString;
} else {
device->connectDevice();
std::cout << "connected vcan0" << std::endl;
device->connect(device, &QCanBusDevice::framesReceived, [device]() {
QCanBusFrame frame = device->readFrame();
QString testV = frame.toString();
QString qvSpeed = frame.payload();
std::string text = testV.toUtf8().constData();
std::string vSpeed = qvSpeed.toUtf8().constData();
//At that point the vVal values are being updated in real time.
//I want to pass the updated vVal to qml gui in real time.
int vVal = static_cast<int>(frame.payload()[0]);
//emit sendMessage(vVal); // 'this' cannot be implicitly captured in this context error.
std::cout << text << std::endl;
});
}
if(QCanBus::instance()->plugins().contains(QStringLiteral(“socketcan”)){
qWarning()创建设备(
QStringLiteral(“socketcan”)、QStringLiteral(“vcan0”)、和errorString);
如果(!设备){
qWarning()连接设备();
std::cout readFrame();
QString testV=frame.toString();
QString qvSpeed=frame.payload();
std::string text=testV.toUtf8().constData();
std::string vSpeed=qvSpeed.toUtf8().constData();
//此时,vVal值正在实时更新。
//我想将更新后的vVal实时传递给qml gui。
int vVal=static_cast(frame.payload()[0]);
//emit sendMessage(vVal);//“this”无法在此上下文错误中隐式捕获。
std::cout您的capture子句只捕获设备
。您还需要显式捕获此
:
device->connect(device, &QCanBusDevice::framesReceived, [this,device]{ /*...*/ });
顺便说一句,请注意,无需为no args lambda表达式指定()
。要修复此错误,您需要更改捕获:[设备]
应变为[此设备]
,甚至所有捕获:[=]