0

我尝试保存 ComboBox 的索引以选择支持的 Open Street Map 地图类型。再次打开应用程序时,应显示最后选择的地图索引。Qt.labs.settings没有像下面的例子那样工作:

import QtQuick 2.6
import QtQuick.Controls 2.0
import QtLocation 5.12
import QtPositioning 5.12
import Qt.labs.settings 1.0

ApplicationWindow{
    id: root
    width: 500
    height: 500
    visible: true
    Settings{
            id:mycombo
            property alias maptype: selectmap.currentIndex
        }
    Flickable {
        height: parent.height
        width: parent.width
        clip: true
        contentHeight: Math.max(mapColumn.implicitHeight, height)
        Column{
            anchors.horizontalCenter: parent.horizontalCenter
            id:mapColumn
            spacing: 5
            anchors.fill : parent
            Row{
                anchors.horizontalCenter: parent.horizontalCenter
                spacing:25
                Rectangle{
                    width:mapColumn.width
                    height:mapColumn.height-80
                    Map {
                          id:map
                            anchors.fill: parent
                            plugin: Plugin {
                              name: "osm"
                          }
                      }
               }
          }

          Column{
              id: combos
              spacing: 10
              width: parent.width
              anchors.verticalCenter: root.verticalCenter
                  Row{
                      anchors.horizontalCenter: parent.horizontalCenter
                      spacing:1
                      Label{ text:"Map Type: "; height: selectmap.height; verticalAlignment: Text.AlignVCenter; }
                      // Map Types
                      ComboBox {
                          id: selectmap
                          width: 200
                          model:map.supportedMapTypes
                          textRole:"description"
                          onCurrentIndexChanged: map.activeMapType = map.supportedMapTypes[currentIndex]

                      }
                  }
          }
      }
    }
}

是否可以为地图保存 ComboBox 的当前索引?

4

1 回答 1

0

通过说“再次打开应用程序”,应用程序可能已被终止,在这种情况下,所有值都将丢失。您必须将索引值存储在文件系统中,如配置数据,在应用程序加载时读取。我想会有几个这样的数据,包括最后输入的地方和历史(缓存更好)。但是对于配置数据,您可以使用 JSON 格式。

创建一个存储所有数据的 JSON 文件,并创建一个控制器,如 GuiConfigurationController,它使用 QJsonValue 解析文件。您也可以考虑创建一个 GuiConfiguration Singletonn 类,它将所有值作为 getter 方法加载。要从 QML 写入 JSON 文件,请使用 Q_PROPERTY WRITE 方法,该方法调用变量的 setter 方法。

Q_PROPERTY(quint32 savedIndex READ savedIndex WRITE setSavedIndex NOTIFY savedIndexChanged)

quint32 savedIndex() const {return m_savedIndex;}
void setSavedIndex(quint32 index) {m_savedIndex = index;}

QML:

_someController.savedIndex = currentIndex

确保 _someController 设置为 rootContext -> ContextProperty 到 QQuickView

因此,当索引更改时,该值在 someController 中设置,该控制器将值保存到 JSON。当应用程序正在加载读取 JSON 并获取 index 的值。使用 onLoaded 方法更新 QtQuick

onLoaded: {currentindex = _someController.savedIndex}
于 2020-05-20T06:12:05.737 回答