首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将二维QVariantList从C++传递到QML

将二维QVariantList从C++传递到QML
EN

Stack Overflow用户
提问于 2015-05-31 17:42:36
回答 1查看 3.8K关注 0票数 5

对于如何将二维QVariantList从C++传递给QML,我真的很困惑,我基本上想从C++传递一个值,它将与在QML中分配它一样,如下所示:

代码语言:javascript
运行
复制
property var twoDim: [["1-1", "1-2"],["2-1", "2-2"]]

这样,我就可以在Repeater元素中使用数组作为模型,方法是:modelData[0]将返回第一个值数组,modelData[1]将返回第二个值数组。比如名字和姓氏..。

请帮帮忙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-31 20:01:12

首先,您可以拥有一个QVariantList of QVariantLists:

代码语言:javascript
运行
复制
// main.cpp
int main( int argc, char* argv[] )
{
    QGuiApplication app( argc, argv );

    auto myList = QVariantList{};
    for ( auto i = 0; i < 2; ++i ) {
        myList << QVariant::fromValue(
                        QVariantList{ QString::number( i + 1 ) + "-1",
                                      QString::number( i + 1 ) + "-2" } );
    }

    auto view = QQuickView{};
    view.rootContext()->setContextProperty( "myList", myList );
    view.setSource( QUrl{ QStringLiteral{ "qrc:/QmlCppTest.qml" } } );
    view.show();

    return app.exec();
}

// QmlCppTest.qml
import QtQuick 2.3

Item {
    property var listOfLists: myList

    Component.onCompleted: {
        for ( var i = 0; i < listOfLists.length; ++i ) {
            for ( var j = 0; j < listOfLists[i].length; ++j ) {
                print( i, j, listOfLists[i][j] );
            }
        }
    }
}

在以下方面的成果:

代码语言:javascript
运行
复制
qml: 0 0 1-1
qml: 0 1 1-2
qml: 1 0 2-1
qml: 1 1 2-2

但是正如我在评论中所说的,如果您的第一个维度代表一个实体,而第二个维度表示该实体的属性,那么性能和维护方面的更好的方法就是使用QAbstractItemModel (或者它的一个更具体的派生类)。

Qt的文档中有很多关于MVC程序设计的内容,您应该花一些时间来学习这个主题,因为它是Qt的基础。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30560568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档