Добрый день.
Работаю с переменными (так называемый HAL слой) в операционной системе реального времени. Все значения общитываюся каждую наносекунду.
И возможно с этим не получается использовать setValue - программа крашиться.
На видео я запускаю стороннюю программу Hal meter - Она работает так как мене надо. У миеня получается изменять переменную если я взаимодействую с интерфейсом.( Нажил на кнопку, Покрутил слайдер и тд)
https://www.youtube.com/watch?v=N_5Y5sHIq98
Дайте пример того как нужно просто неприрывно передать значения переменной с++ в QML. Посути просто линкануть переменную С++ в QML label
Добрый день, набросал пример:
Значение изменяется в TestClass, отображается в Text, main.cpp:
#include <QGuiApplication> #include <QQmlApplicationEngine> #include "testclass.h" int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication app(argc, argv); QQmlApplicationEngine engine; qmlRegisterType("myCompany.testClass", 1, 0, "TestClass"); const QUrl url(QStringLiteral("qrc:/main.qml")); QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject *obj, const QUrl &objUrl) { if (!obj && url == objUrl) QCoreApplication::exit(-1); }, Qt::QueuedConnection); engine.load(url); return app.exec(); }
main.qml:
import QtQuick 2.15 import QtQuick.Window 2.15 import myCompany.testClass 1.0 Window { width: 320 height: 240 visible: true title: qsTr("Test Project") color: "#202020" Text { id: counterValueText text: "0" anchors.centerIn: parent color: "#ffffff" font.pointSize: 24 } TestClass { id: testClass onCounterChanged: { counterValueText.text = testClass.counter; } } }
testclass.h:
#ifndef TESTCLASS_H #define TESTCLASS_H #include <QObject> #include <QTimer> class TestClass : public QObject { Q_OBJECT public: explicit TestClass(QObject *parent = nullptr); Q_PROPERTY(int counter READ getCounter NOTIFY counterChanged); int getCounter(); signals: void counterChanged(); private slots: void timeoutOccured(); private: int counter; QTimer *timer; }; #endif // TESTCLASS_H
testclass.cpp:
#include "testclass.h" constexpr int periodMs = 50; TestClass::TestClass(QObject *parent) : QObject(parent), counter(0) { timer = new QTimer(this); QObject::connect(timer, &QTimer::timeout, this, &TestClass::timeoutOccured); timer->start(periodMs); } int TestClass::getCounter() { return counter; } void TestClass::timeoutOccured() { counter++; emit counterChanged(); }
Проект: ссылка.