Добрый день.
Работаю с переменными (так называемый 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();
}
Проект: ссылка.
