Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 将公共对象作为列表保存在QML中_Qt_Architecture_Qml - Fatal编程技术网

Qt 将公共对象作为列表保存在QML中

Qt 将公共对象作为列表保存在QML中,qt,architecture,qml,Qt,Architecture,Qml,我在QML中开发的应用程序中存在架构问题。请考虑以下数字: 有关应用程序的一些事实: 我需要存储一个元素名数组,这里是橙色、苹果和香蕉 元素的数量是固定的,在运行时不会更改 虽然只有1个元素数组,但应该可以同时以不同的图形形式显示。在本例中,元素一度表示为黄色正方形,其他时间表示为绿色三角形。它们不一定必须以相同的顺序显示。但在运行时,顺序也不会改变 我希望避免不必要的代码复制,因此,我只希望使用1个具有不同图形表示的列表。然而,我在实现这一点时遇到了问题 Welp,在我有足够的声誉之前不能发

我在QML中开发的应用程序中存在架构问题。请考虑以下数字:

有关应用程序的一些事实:

  • 我需要存储一个元素名数组,这里是橙色、苹果和香蕉
  • 元素的数量是固定的,在运行时不会更改
  • 虽然只有1个元素数组,但应该可以同时以不同的图形形式显示。在本例中,元素一度表示为黄色正方形,其他时间表示为绿色三角形。它们不一定必须以相同的顺序显示。但在运行时,顺序也不会改变

  • 我希望避免不必要的代码复制,因此,我只希望使用1个具有不同图形表示的列表。然而,我在实现这一点时遇到了问题

    Welp,在我有足够的声誉之前不能发表评论,但你就不能用这个吗?然后可以使用两个路径视图来确定对象的位置。这是一个示例,但您将拥有自己的QabStretchListModel,而不是示例ListModel。代表将决定项目的形状


    之所以在QML的ListModel上使用QabStretchListModel,是因为ListModel是在运行时创建的。

    Welp,在我有足够的声誉之前,不能发表评论,但你不能仅用于此吗?然后可以使用两个路径视图来确定对象的位置。这是一个示例,但您将拥有自己的QabStretchListModel,而不是示例ListModel。代表将决定项目的形状


    之所以在QML的ListModel上使用QabStretchListModel,是因为ListModel是在运行时创建的。

    我不太明白OP想要归档什么,但我想您需要的就是这个模型。 这是可重用模型的一个简单示例:

    import QtQuick 2.11
    import QtQuick.Window 2.2
    import QtQuick.Controls 2.2
    
    Window {
        visible: true
        width: 600
        height: 400
        title: qsTr("Model example")
    
        ListModel {
            id:  myModel;
            ListElement { name: "Apple" }
            ListElement { name: "Orange" }
            ListElement { name: "Banana" }
        }
    
        Repeater {
            model: myModel
            delegate: type1
        }
    
        Repeater {
            model: myModel
            delegate: type2
        }
    
        ListView {
            model: myModel
            delegate: Text { text: name; height: 30; }
            width: 100
            height: 200
        }
    
        ComboBox {
            width: 100
            y: 200
            model: myModel
        }
    
        Component {
            id: type1
            Canvas {
                x: 100 + Math.round(Math.random() * 400)
                y: Math.round(Math.random() * 100)
                rotation: Math.round(Math.random() * 360)
                antialiasing: true
                width: 100
                height: 100
                onPaint: {
                    var ctx = getContext("2d");
                    ctx.fillStyle = "#00DD00";
                    ctx.beginPath();
                    ctx.moveTo(50, 0);
                    ctx.lineTo(100, 100);
                    ctx.lineTo(0, 100);
                    ctx.fill();
                }
                Text {
                    anchors.centerIn: parent
                    text: name
                }
            }
        }
    
        Component {
            id: type2
            Rectangle {
                x: 100 + Math.round(Math.random() * 400)
                y: 200 + Math.round(Math.random() * 100)
                rotation: Math.round(Math.random() * 360)
                antialiasing: true
                width: 100
                height: 100
                color: "orange"
                Text {
                    anchors.centerIn: parent
                    text: name
                }
            }
        }
    }
    

    我不太明白OP想要归档什么,但我想那个模型正是您所需要的。 这是可重用模型的一个简单示例:

    import QtQuick 2.11
    import QtQuick.Window 2.2
    import QtQuick.Controls 2.2
    
    Window {
        visible: true
        width: 600
        height: 400
        title: qsTr("Model example")
    
        ListModel {
            id:  myModel;
            ListElement { name: "Apple" }
            ListElement { name: "Orange" }
            ListElement { name: "Banana" }
        }
    
        Repeater {
            model: myModel
            delegate: type1
        }
    
        Repeater {
            model: myModel
            delegate: type2
        }
    
        ListView {
            model: myModel
            delegate: Text { text: name; height: 30; }
            width: 100
            height: 200
        }
    
        ComboBox {
            width: 100
            y: 200
            model: myModel
        }
    
        Component {
            id: type1
            Canvas {
                x: 100 + Math.round(Math.random() * 400)
                y: Math.round(Math.random() * 100)
                rotation: Math.round(Math.random() * 360)
                antialiasing: true
                width: 100
                height: 100
                onPaint: {
                    var ctx = getContext("2d");
                    ctx.fillStyle = "#00DD00";
                    ctx.beginPath();
                    ctx.moveTo(50, 0);
                    ctx.lineTo(100, 100);
                    ctx.lineTo(0, 100);
                    ctx.fill();
                }
                Text {
                    anchors.centerIn: parent
                    text: name
                }
            }
        }
    
        Component {
            id: type2
            Rectangle {
                x: 100 + Math.round(Math.random() * 400)
                y: 200 + Math.round(Math.random() * 100)
                rotation: Math.round(Math.random() * 360)
                antialiasing: true
                width: 100
                height: 100
                color: "orange"
                Text {
                    anchors.centerIn: parent
                    text: name
                }
            }
        }
    }
    

    @谢谢你的回答。问题是,我没有MWE,因为我尝试的东西甚至不会运行。这更多的是一个概念问题,因为我不知道如何编写代码(因此没有提供MWE)。相反,我引入了一个使用图像的概念,它也只显示了用QML组件表达的想法,不能解释为工作代码,因为它不像我所说的那样工作。我用它来帮助理解我的问题。如果你认为这一部分是矛盾的,我可以删除它。它表明代码的工作方式与我展示的不一样。格式不对,是的。将修复.architecture问题,但特定于QML,因为我不知道如何在实践中使用QML。我已删除了代码部分。@eyllanesc谢谢您的回答。问题是,我没有MWE,因为我尝试的东西甚至不会运行。这更多的是一个概念问题,因为我不知道如何编写代码(因此没有提供MWE)。相反,我引入了一个使用图像的概念,它也只显示了用QML组件表达的想法,不能解释为工作代码,因为它不像我所说的那样工作。我用它来帮助理解我的问题。如果你认为这一部分是矛盾的,我可以删除它。它表明代码的工作方式与我展示的不一样。格式不对,是的。将修复.architecture问题,但特定于QML,因为我不知道如何在实践中使用QML。我已删除了代码部分。使用
    ListModel
    甚至简单的js数组作为模型都可以。这完全取决于OP的需要。一般来说,我想把QML尽可能地独立于C++代码。如果可能的话,我会坚持使用QML-only方法。这完全取决于OP的需要。一般来说,我想把QML尽可能地独立于C++代码。如果可能的话,我会坚持只使用QML的方法。这正是我的意思。我知道理论上的经典模型通常应该是什么样子,但我不知道如何使用QML实现它。谢谢,这正是我的意思。我知道理论上的经典模型通常应该是什么样子,但我不知道如何使用QML实现它。非常感谢。