首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QML ListModel文件读写和良好实践

QML ListModel文件读写和良好实践
EN

Stack Overflow用户
提问于 2014-11-04 00:51:17
回答 1查看 1.5K关注 0票数 2

我刚刚开始学习QML,当我想从设置中阅读ListModel时,我有点不知所措。

我的困境是:

1)如果我在C++代码中定义了模型,我在加载它时没有问题(我已经做了类似的工作很多次了),但是我牺牲了我的时间来实际编写(然后更新)模型代码,然后每次我需要重新编译它。

2)另一种思路是将设置文件读取到QList of QVariantMap中,并在QVariantMap文件中创建模型,使用javascript读取该列表。这样,我只需要2个C++函数,一个逐段读取文件,一个写入文件。但正如我所说-我只是刚开始QML编程,不确定它是理智的还是气馁的。

当一个人需要动态QML ListModel时,有人能对良好实践发表评论吗?

UPD:我似乎需要澄清这个问题:

如果内容足够简单,可以从设置中读取,然后通过Javascript直接解析到ListModel,那么我甚至需要使用ListModel数据模型吗?或者,我还没有意识到,C++方式是唯一合理的选择吗?

UPD2在做了一些研究之后,我很想和LocalStorage一起去,完全放弃c++

EN

回答 1

Stack Overflow用户

发布于 2014-11-04 10:04:14

使现有的C++模型可编辑是非常容易的,因为您可以从Qt中获得所有信息。

在.h中有以下内容

代码语言:javascript
运行
复制
class MyModel : public QAbstractListModel
{
    Q_OBJECT

public:
    enum MyRoles {
        SomeRole = Qt::UserRole,
        // ...
    }
    // ...
    bool setData(const QModelIndex &index, const QVariant &value, int role);

在.cpp中

代码语言:javascript
运行
复制
bool MyModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
    switch (role) {
    case SomeRole:
        // your writer code
        emit dataChanged(index, index, (QVector<int>(0) << SomeRole));
        return true;
    case SomeOtherRole:
        // ...
        return true;
    default:
        qCritical() << "MyModel.setData: Unknown role:" << role;
        return false;
    }
}

现在,您可以使用QML内部元素对写入进行遍历。

代码语言:javascript
运行
复制
MyModelDelegate {
    Button {
        text: somerole
        onClicked: {
            // this will call setData with the correct row index and SomeRole 
            somerole = "some other value"
        }
    }
}

只有在添加新角色时才会重新编译此C++代码,这种情况不应该经常发生,或者编写方法会更改。

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

https://stackoverflow.com/questions/26726001

复制
相关文章

相似问题

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