gpt4 book ai didi

c++ - 将数据提供给 ChartView (LineSeries) - QML

转载 作者:行者123 更新时间:2023-11-28 04:50:48 26 4
gpt4 key购买 nike

我最近开始使用 QML,我正在寻找一种方法来将数据从 C++ 提供到 QML 中的 ChartView。我更喜欢一个解决方案,我可以发送一个带有 Q_PROPERTY 之类的 QMap,以便它自动更新。

我搜索并发现您可以执行一个函数,然后您可以使用“append()”向图表添加值。但我似乎无法向 QML 发送某种列表...

QML 文件:

ChartView {
theme: ChartView.ChartThemeQt
antialiasing: true

DateTimeAxis {
id: dateTimeAxisX
}

ValueAxis{
id: valueAxisY
min: 0
max: 15
titleText: "Voltage (V)"
}

LineSeries {
id: voltageSeries
axisX: dateTimeAxisX
axisY: valueAxisY
name: "Battery Voltage"
}
}

机器人.h:

class Robot: public QObject
{
...
Q_PROPERTY(QMap<int, double> list_battery_voltages READ getList_battery_voltages NOTIFY listBatteryVoltagesChanged)
...
}

主要.cpp:

int main(int argc, char *argv[])
{
#if defined(Q_OS_WIN)
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif

QApplication app(argc, argv);
QQmlApplicationEngine engine;

// Load custom class inside engine
QScopedPointer<Robot> robot(new Robot(app.applicationDirPath() + "/robot_settings.ini"));
engine.rootContext()->setContextProperty("robot", robot.data());

QQmlComponent component(&engine, QUrl(QLatin1String("qrc:/main.qml")));
component.create();

return app.exec();
}

是否有我监督的优雅解决方案?

最佳答案

我已经使用 QVariantMap 解决了这个问题。它不是最优雅的解决方案,但它有效:)我的 QML 文件中有一个 javascript 函数,用于填充 lineseries。此功能连接到我的机器人信号,该信号将在新数据到达时发送。

机器人.h:

class Robot: public QObject
{
...
Q_PROPERTY(QVariantMap list_battery_voltages READ getList_battery_voltages NOTIFY listBatteryVoltagesChanged)
...
}

QML:

ChartView {
...
Connections {
target: robot
onMapBatteryVoltagesChanged: insertVoltages()
}

Component.onCompleted: {
insertVoltages()
}
...
function insertVoltages() {
var voltages_map = robot.map_battery_voltages
for (var prop in voltages_map) {
voltageSeries.append(prop, voltages_map[prop])
}
}
...
}

关于c++ - 将数据提供给 ChartView (LineSeries) - QML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48261138/

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