Чтение значения из QML в C ++ - PullRequest
       0

Чтение значения из QML в C ++

0 голосов
/ 18 февраля 2020

Я пытаюсь прочитать int value со стороны QML на c++, но это значение остается 0 и не обновляется на стороне c++, в то время как console.log() ясно показывает, что оно увеличивается после каждый клик. Что я здесь не так делаю?

.qml файл

FocusScope {

        property alias myrecordint: startbutton.recordint

        Rectangle {
            id: buttonPaneShadow
            width: bottomColumn.width + 16
            height: parent.height
            anchors.top: parent.top
            anchors.right: parent.right
            color: "white"

            Column {
                anchors {
                    right: parent.right
                    top: parent.top
                    margins: 8
                }

                id: buttonsColumn
                anchors.rightMargin: 20
                anchors.topMargin: 20
                spacing: 12

                CameraButton {
                    id: startbutton
                    property int recordint:0
                    text: "Record"
                    visible: camera.videoRecorder.recorderStatus == CameraRecorder.LoadedStatus
                    onClicked:
                    {
                        recordint=recordint+1
                        camera.videoRecorder.record()
                        console.log(recordint)

                    }
                }
           }
      }
 }

. cpp файл

   QQmlEngine engine;
   QQmlComponent component(&engine, QUrl("qrc:/VideoCaptureControls.qml"));
   QObject *object = component.create();
   qDebug() << "Property value:" << QQmlProperty::read(object, "myrecordint").toInt();

1 Ответ

0 голосов
/ 18 февраля 2020

РЕДАКТИРОВАТЬ

После комментирования назад и вперед кажется, что вы не используете экземпляр, который вы должны использовать, поскольку вы создаете новый экземпляр по нажатию кнопки.

Кроме того, чтение свойства выполняется один раз и не обновляется автоматически.

В целом это классическая проблема c XY и Вы должны стремиться использовать модель C ++, на что также указал Арнес ( пример 1 и пример 2 )

Оригинальный ответ (неверно, поскольку свойство равно верхнего уровня)

Вы можете читать свойства только с верхнего уровня объекта QML (при чтении вне объекта). Вы должны переместить свойство, как указано ниже:

Rectangle {
        id: buttonPaneShadow
        width: bottomColumn.width + 16
        height: parent.height
        anchors.top: parent.top
        anchors.right: parent.right
        color: "white"

        property int recordint:0 //move to here

        Column {
            anchors {
                right: parent.right
                top: parent.top
                margins: 8
            }

            id: buttonsColumn
            anchors.rightMargin: 20
            anchors.topMargin: 20
            spacing: 12

            CameraButton {
                id: startbutton
                text: "Record"
                visible: camera.videoRecorder.recorderStatus == CameraRecorder.LoadedStatus
                onClicked:
                {
                    recordint=recordint+1
                    camera.videoRecorder.record()
                    console.log(recordint)

                }
            }
    }
}

Лично мне не нравится, как вы, кажется, реализуете это. Я бы предпочел go для модели C ++ со свойствами, которые обновляются, но это ваше дело

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...