gpt4 book ai didi

c++ - 有没有办法有效地更新 QML 中的 CAN 数据?

转载 作者:行者123 更新时间:2023-11-30 04:43:13 25 4
gpt4 key购买 nike

目前我正在使用 main.cpp 文件中的 socketcan API 实时接收 CAN 数据。

我在main.cpp中的一个变量中不断更新CAN的数据帧。

我想通过将 main.cpp 中包含 CAN 数据帧的变量传递给 QML 动画仪表来实时表达仪表。

我需要实时检测QML中包含CAN数据的变量的变化。不知有没有有效的方法。

我尝试使用 emit 与 QML 共享数据。但是device->connect(device,&QCanBusDevice::framesReceived,[device](){...}里面的emit写的函数不起作用。

使用时出现错误

'this' cannot be implicitly captured in this context.

我查找错误,但没有找到答案。

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;
});
}

截至目前,main.cpp无法发送数据,QML无法解决错误。

device->connect 中,emit sendMessage (vVal); 会导致“'this' cannot be implicitly capture in this context”错误。

想知道有没有什么好的方法可以通过实时表达QML GUI数据来实现动画

最佳答案

您的捕获子句仅捕获device。您还需要明确捕获 this:

device->connect(device, &QCanBusDevice::framesReceived, [this,device]{ /*...*/ });

顺便说一句,请注意,无需为无参数 lambda 表达式指定 ()

关于c++ - 有没有办法有效地更新 QML 中的 CAN 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58391658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com