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表达式指定
()

要修复此错误,您需要更改捕获:
[设备]
应变为
[此设备]
,甚至所有捕获:
[=]