Hello, I try to read settings in C++ that are written from within QML. But apparently, I need some delay between writing the value in QML and reading the new value in C++ (even when calling settings.sync() in both QML and C++). Apparently, I have to wait about 1000ms (500ms sometimes works, sometimes doesn't)
The following code illustrates the problem. My QML code looks like this import QtQuick 2.12 import QtQuick.Window 2.12 import Qt.labs.settings 1.0 Window { id: root visible: true width: 640 height: 480 title: qsTr("Hello World") property int ctr: 0 Settings { id: settingsId property alias ctr: root.ctr onCtrChanged: { console.info("QML: before C++ call ctr = "+root.ctr + "//" + ctr) settingsId.sync(); readSettings.printSettings("try ") Qt.callLater(tryAgain) tryAnotherTime.start() console.info("QML: after C++ call ctr = "+root.ctr) } function tryAgain() { settingsId.sync(); readSettings.printSettings("try again ") } } Timer { id: tryAnotherTime interval: 1000 onTriggered: readSettings.printSettings("try in timer ") } MouseArea { anchors.fill: parent onClicked: root.ctr++ } } The relevant C++ printSettings() function is void ReadSettings::printSettings(QString prefix) { QSettings settings; settings.sync(); int ctr = settings.value("ctr", "-1").toInt(); qInfo() << "ReadSettings::printSettings "<< prefix << " read ctr=" << ctr; } The ReadSettings object is registered as a context property in main.pp When I run this code, I get the following log lines qml: QML: before C++ call ctr = 8//8 ReadSettings::printSettings "try " read ctr= 7 qml: QML: after C++ call ctr = 8 ReadSettings::printSettings "try again " read ctr= 7 ReadSettings::printSettings "try in timer " read ctr= 8 This shows that the first two calls to printSettings still print the old value. The call after 1000ms prints the correct value Is this a bug? Do you see work-arounds I can try? Kind Regards, Marc
_______________________________________________ Interest mailing list Interest@qt-project.org https://lists.qt-project.org/listinfo/interest