Невозможно сохранить объект QML внутри файла QML загрузчика - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь сохранить переменную из другого объекта QML в root файле QML с помощью настроек. Я могу получить доступ к переменной с помощью myloader.item.number, но когда я пробую ее в настройках, появляется ошибка: Invalid alias target location: number Есть ли способ сохранить переменную с помощью модуля настроек?

MyPage.qml

import QtQuick 2.0
import QtQuick.Controls 2.12
Rectangle {
    property alias number: combo.currentIndex
    color: "red"
    ComboBox{
        id: combo
        model: ["a","b","c"]
    }
}

main.qml

import QtQuick 2.3
import QtQuick.Window 2.10
import Qt.labs.settings 1.1
Window{
    visible: true
    width: 200
    height: 200
    Component.onCompleted: {
        console.log("loader property is:", myloader.item.number)
    }
    //
    Loader{
        id:myloader
        //asynchronous: true
        active: true
        source: "MyPage.qml"
        anchors.fill: parent
    }
    /*
    // This can save the number with "property alias myNumber: mapage.number"
    MyPage{
        id: mapage
    }
    */
    Settings{
        id: settings
        // This gives error when using loader: Invalid alias target location: number
        property alias myNumber: myloader.item.number
    }
}

Ответы [ 2 ]

1 голос
/ 14 июля 2020

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

import QtQuick 2.3
import QtQuick.Window 2.10
import Qt.labs.settings 1.1
Window{
    visible: true
    width: 200
    height: 200
    Component.onCompleted: {
        console.log("loader property is:", myloader.item.number)
    }
    //
    Loader{
        id:myloader
        active: true
        sourceComponent: myPage
        anchors.fill: parent

        Component
        {
            id: myPage

            MyPage
            {
                // Initialize the combobox from Settings
                number: settings.myNumber

                // Update the settings from the combobox
                onNumberChanged: settings.myNumber = number
            }
        }
    }
    Settings{
        id: settings
        property int myNumber
    }
}
0 голосов
/ 14 июля 2020

Ответ @ JarMan - лучшее решение. Я нашел другое решение, в котором я также использовал объект настроек для MyPage.qml:

import QtQuick 2.0
import QtQuick.Controls 2.12
import Qt.labs.settings 1.1
Rectangle {
    property alias number: settings2.comboIndex
    Settings{
        id: settings2
        property alias comboIndex: combo.currentIndex
    }
    color: "red"
    ComboBox{
        id: combo
        model: ["a","b","c"]
    }
}

main.qml

import QtQuick 2.3
import QtQuick.Window 2.10
import Qt.labs.settings 1.1

Window{
    visible: true
    width: 200
    height: 200
    Component.onCompleted: {
        console.log("loader property is:", settings.myNumber)
    }
    Loader{
        id:myloader
        source: "MyPage.qml"
        anchors.fill: parent
    }
    Settings{
        id: settings
        property int myNumber: myloader.item.number
    }
}

Настройки MyPage содержат индекс пользовательского интерфейса для ComboBox, Настройки главного. qml содержит значение ComboBox.

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