Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. QML update when c++ object value changed using Q_PROPERTY and NOTIFY
Forum Update on Monday, May 27th 2025

QML update when c++ object value changed using Q_PROPERTY and NOTIFY

Scheduled Pinned Locked Moved Solved QML and Qt Quick
2 Posts 1 Posters 862 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • I Offline
    I Offline
    Inso
    wrote on 14 Jun 2020, 17:52 last edited by Inso
    #1

    Hi,

    I have read a lot about this before posting here, sadly it seems it mostly uses a complete different approach.

    I have a digital clock in C++ (kicked a lot out to keep it simple, so only seconds here):

    digiclock.h :

    #ifndef DIGICLOCK_H
    #define DIGICLOCK_H
    
    #include <QObject>
    
    class digiclock : public QObject
    {
        Q_OBJECT   
        Q_PROPERTY (QString actualTimeSec READ actuTimeSec WRITE setActuTimeSec NOTIFY timeWasSetSec)
    
    public:
        explicit digiclock(QWidget *parent = nullptr);
    
        QString actuTimeSec();
    
    private:
        void setActuTimeSec(QString);
    
        QString m_actualTimeSec;
    
    private slots:
    
    signals:
        void timeWasSetSec(QString);
    };
    
    #endif
    

    and the digiclock.cpp:

    #include "digiclock.h"
    
    #include <QTime>
    #include <QTimer>
    
    digiclock::digiclock(QWidget *parent)
    {
    
        QTimer *timer = new QTimer(this);
        connect(timer, &QTimer::timeout, this, &digiclock::getTime);
        timer->start(1000);
        getTime();
    }
    
    void digiclock::getTime() {
        QTime time = QTime::currentTime();
        setActuTimeSec(time.toString("ss"));
    }
    
    QString digiclock::actuTimeSec()
    {
        return m_actualTimeSec;
    }
    
    void digiclock::setActuTimeSec(QString timeSec)
    {
        m_actualTimeSec = timeSec;    
        emit timeWasSetSec(timeSec);}
    

    every second, the new time is set to m_actualTimeSec. This update I need within my QML file.

    my main.cpp:

    #include <QGuiApplication>
    #include <QQmlApplicationEngine>
    
    #include "digiclock.h"
    
    int main(int argc, char *argv[])
    {    QCoreApplication::setAttribute(Qt::AA_DisableHighDpiScaling);
    
        QGuiApplication app(argc, argv);
    
        QQmlApplicationEngine engine;
        
        qmlRegisterType<digiclock>("DigitalClock", 1, 0, "Clock");
    
        engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
        if (engine.rootObjects().isEmpty())
            return -1;
    
        return app.exec();
    }
    

    and the main.qml:

    import QtQuick 2.9
    import QtQuick.Controls 2.4
    import QtQuick.Layouts 1.3
    import QtQuick.Controls.Material 2.3
    
    import DigitalClock 1.0
    
    ApplicationWindow {
        id:root
        visible: true
        width: 800
        height: 480
        color: "#babdb6"
        title: qsTr("Welcome")
        //visibility: "FullScreen"
    
        Clock{
            id: myClock
        }
    
            Text {
                id: timeSec
                x: 305
                y: 51
                text: qsTr(myClock.actualTimeSec)
                font.pixelSize: 12
            }
        }    
    }
    

    I now have the ID myClock, which is an object of C++ - digiclock, created on load of the QML. I can perfectly set the actual time. Problem is, I dunno how to connect to the signal-slot of my digiclock-object from the QML files, so the seconds are updated every second.
    I have played around with signal - word and tried to implement it within the text field, with no success. What I need somewhere is the incoming signal to update timeSec.text, preferred within the QML directly and not also adding the signal within the main.cpp as shown on other examples.

    1 Reply Last reply
    0
    • I Offline
      I Offline
      Inso
      wrote on 14 Jun 2020, 18:32 last edited by Inso
      #2

      dunno why it bugged, now it works.

      1 Reply Last reply
      0

      1/2

      14 Jun 2020, 17:52

      • Login

      • Login or register to search.
      1 out of 2
      • First post
        1/2
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved