c++ - 覆盖 QML 文件中设置的 ListModel

标签 c++ qml qabstractlistmodel

我有一个 QML C++ 项目,其中 C++ 部分将后端和 QML 用户界面之间的连接联系起来。

我将 QObject 的子类设置为上下文属性,该子类具有 QAbstractListModel 属性。

我的一个组件在 qml 文件中预定义了一个列表模型。我想用我自己的列表模型替换它。但如果未设置上下文属性,我想保留该模型。这允许我在没有 C++ 部分的情况下运行该程序。 将模型设置为上下文属性并没有起到作用,因为本地模型覆盖了上下文属性。

我的 QML 看起来像这样

Rectangle {
id: root_rect
objectName: "root_rect"
width: 300
height: 300
color: "#dbdbdb"

ListModel {
                id: myModel
                ListElement {
                    name: "foo1"
                    fin: "bar1"
                }

                ListElement {
                    name: "foo2"
                    fin: "bar2"
                }
            }

Rectangle {
    id: list_bg
    color: "#ffffff"
    clip: true
    anchors.top: parent.top
    anchors.topMargin: 10
    anchors.bottom: parent.bottom
    anchors.bottomMargin: 10
    anchors.left: parent.left
    anchors.leftMargin: 10
    anchors.right: parent.right
    anchors.rightMargin: 10

    ListView {
        id: list_view1
        anchors.fill: parent
        delegate: Item {
            x: 5
            height: 40
            Row {
                id: row1
                spacing: 10

                Text {
                    text: name+" "+fin
                    anchors.verticalCenter: parent.verticalCenter
                    font.bold: true
                }
            }
        }
        model: myModel
      //model: myObject.myModel
    }
}
}

是否可以同时拥有 qml 文件中的模型,用于在 Designer 中显示默认值和用于 Gui 测试,并且如果我将 myObject 设置为上下文属性,则可以轻松覆盖?

编辑:我使用 QT 4 和 QtQuick 1.1

最佳答案

我不知道这是否适用于 QtQuick 1,但您可以依赖异常处理。类似的东西适用于 QtQuick 2:

ListView {
    id: list_view1
    anchors.fill: parent
    delegate: Item {
        ...
    }
    model: myModel
    Component.onCompleted:{
        try{
            model = myObject.myModel
        }
        catch(exception){
            console.log("myObject unknown, switching to default model")
            model = myModel
        }
    }
}

关于c++ - 覆盖 QML 文件中设置的 ListModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27274503/

相关文章:

c++ - UDP 打洞 (c++/winsock)

c++ - 大小为 k 的数组(大小为 n)的子集数,最大和最小元素之差最多为 x

带有参数的 C++ 模板策略

c++ - 将 QStandardItemModel 从 C++ 传递到 QtQuick/QML TableView 并显示它

qt - 在 Qt 中将原始 OpenGL 渲染为 QML UI 的两种方法的比较

Qt Creator qml : Use (extra) Qt Components library (ubuntu)

python - PyQt5 和 QAbstractListModel::columnCount

c++ - GDB加载so文件失败并报错No such file or directory

python - 无法将 QAbstractListModel 传递给 QML

python - PyQT ListView 不响应数据更改信号