Finally, animation works.

This commit is contained in:
2025-12-19 21:20:14 +01:00
parent 552fcdf8f8
commit 826e506d00
6 changed files with 204 additions and 44 deletions

View File

@@ -35,6 +35,7 @@
#include <QMessageBox>
#include <QStatusBar>
#include <QApplication>
#include <QElapsedTimer>
#include <bcvaluemanager.h>
@@ -42,6 +43,16 @@
using namespace Qt::StringLiterals;
void processEventsFor(int milliseconds)
{
QElapsedTimer timer;
timer.start();
while (timer.elapsed() < milliseconds) {
QApplication::processEvents(QEventLoop::AllEvents, 50);
}
}
BCValueManager::BCValueManager(QObject *parent)
: QObject(parent)
{
@@ -54,11 +65,11 @@ BCValueManager::BCValueManager(QObject *parent)
// 4. Verbindungen herstellen (Signal/Slot über Thread-Grenzen)
// A) Befehl senden (Manager -> Runner)
connect(this, &BCValueManager::newCommandArrived, &_transmitter, &BCTransmitter::enqueueValue);
connect(this, &BCValueManager::valueCreated, &_transmitter, &BCTransmitter::enqueueValue);
// B) Ergebnisse empfangen (Runner -> Manager)
connect(&_transmitter, &BCTransmitter::commandFinished, this, &BCValueManager::onCommandFinished);
connect(&_transmitter, &BCTransmitter::messageLogged, this, &BCValueManager::onRunnerMessage);
//connect(&_transmitter, &BCTransmitter::commandFinished, this, &BCValueManager::onCommandFinished);
//connect(&_transmitter, &BCTransmitter::messageLogged, this, &BCValueManager::onRunnerMessage);
// C) Aufräumen: Wenn Thread endet, lösche den Runner
connect(&_worker, &QThread::finished, &_transmitter, &QObject::deleteLater);
@@ -77,14 +88,6 @@ BCValueManager::~BCValueManager()
}
void BCValueManager::transmitValue(const BCValue& value)
{
// Wir rufen keine Methode am Runner direkt auf!
// Wir emitten ein Signal. Qt kümmert sich um den Thread-Wechsel.
emit newCommandArrived(value);
}
void BCValueManager::onCommandFinished(int id, bool success)
{
@@ -144,14 +147,25 @@ void BCValueManager::onSyncFromDevice()
{
BCValueList& currentList = _valueModels[_currentDeviceID]->getValueList();
for( BCValue& value : currentList )
BCValue& value = currentList[4];
for( const BCValue& value : currentList )
{
qDebug() << " --- value: " << value.label;
_transmitter.enqueueValue( value );
// statt '_transmitter.enqueueValue( value )' entkoppeln
// wir das eleganter über emit valueCreated()
//_transmitter.enqueueValue( value );
emit valueCreated(value);
emit valueTouched( value.rowInModel );
QApplication::processEvents();
processEventsFor(500);
//QApplication::processEvents();
// Thread schlafen lassen (Simulation einer blockierenden Operation)
QThread::msleep(500);
//QThread::msleep(500);
}