将二维QVariantList从c++传递到QML
Passing 2-dimensional QVariantList from C++ to QML
我真的很困惑如何将二维QVariantList从c++传递到QML,我基本上想从c++传递一个值,这将像在QML中分配它一样:
property var twoDim: [["1-1", "1-2"],["2-1", "2-2"]]
这样我就可以使用数组作为Repeater
元素的模型,通过这样做:modelData[0]
将返回第一个值数组,modelData[1]
将返回第二个值数组。
请帮
首先你可以有一个QVariantList
或QVariantList
s:
// 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] );
}
}
}
}
结果:
qml: 0 0 1-1
qml: 0 1 1-2
qml: 1 0 2-1
qml: 1 1 2-2
但是就像我在评论中说的,如果你的第一个维度代表一个实体,而第二个维度代表该实体的属性,那么出于性能和维护的原因,更好的方法是使用QAbstractItemModel
(或它的一个更具体的派生类)。
Qt的文档有很多关于MVC编程的东西,你应该花一些时间来学习这个主题,因为它是Qt的基础。
相关文章:
- 从C++实例化QML
- 使用CMake创建QML插件
- QT通过C++添加映射QML项目
- 如何在没有信号的情况下从C++执行QML插槽
- QML按钮点击功能执行顺序
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 建议在运行时将带有类实例的列表从c++导入qml
- Qt Quick-如何仅从c++代码与qml属性交互
- 如何将带有自定义对象的容器从C++传递到QML
- QML 使用带有参数C++函数
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- 如何从C++端挂接到 QML 项的 onClick 事件
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 从C++更改 QML 图像源
- QML TableView 使用 QtQuick.Controls 2 单击行
- 如何多次询问来自QML对话框的输入?
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 阅读 QML 中结构C++ QVector 的 QVector
- 如何使用connect将qml按钮与同一类的cpp函数连接起来
- Qt QML桌面应用程序自动化测试