查看完整版本: [-- C++中如何调用QML中listmodel的append函数 --]

QTCN开发网 -> Qt基础编程 -> C++中如何调用QML中listmodel的append函数 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

三只小鸡 2020-06-15 19:33

C++中如何调用QML中listmodel的append函数

  1. ListModel{
            id: boardModel
        }
        Component.onCompleted: {
            CHub.initProjectInfo(boardModel)
        }
上面代码中我在qml的一个界面中我新建了一个listModel,界面Component.onCompleted 时跳到C++函数中
  1. void CHub::initProjectInfo(QObject *projectUI)
    {
       QStringList lstName;
       CProjectManage projectManage;
       projectManage.getAllProjectInfo(lstName); //获取工程名链表

       for(int i = 0; i < lstName.count(); i++)
       {
           QMetaObject::invokeMethod(projectUI, "append", Q_ARG(QVariant, lstName.at(i))); //这里我想使用append函数给listModel添加子项
       }
    }
我想使用append函数给listModel添加子项,但是不知道怎么弄,append的参数是jsobject dict,我要怎么做呢???


lemonzll 2020-06-17 14:29
按这里的说明https://doc.qt.io/qt-5/qtqml-cppintegration-data.html#qvariantlist-and-qvariantmap-to-javascript-array-and-object,正常应该传QVariantMap就行了。我试了下不行,提示是这个:
  1. QMetaObject::invokeMethod: No such method QQmlListModel_QML_6::append(QVariant)
    Candidates are:
        append(QQmlV4Function*)
也就是这里的append函数参数不是个js的object,所以得换下了。例如ListModel你需要的是两个字段,name和desc,就这样改下qml:
  1. ListModel {
            id: listModel


            function appendItem(item) {
                append({name: item.name, desc: item.desc});
            }
    }
这样,调用appendItem来实现插入就可以了。
  1. QVariantMap map;
    map.insert("name", "Element 1");
    map.insert("desc", "Desc 1");
    QMetaObject::invokeMethod(model, "appendItem", Q_ARG(QVariant, QVariant::fromValue(map)));
这种用个js函数封装一下的方式可以。或者你可以完全不用ListModel,直接model全用C++实现,直接继承QAbstractListModel,在C++里面实现所有的操作,然后把这个model赋值给ListView的model。


三只小鸡 2020-06-18 08:28
lemonzll:按这里的说明https://doc.qt.io/qt-5/qtqml-cppintegration-data.html#qvariantlist-and-qvariantmap-to-javascript-array-and-object,正常应该传QVariantMap就行了。我试了下不行,提示是这个:
QMetaObject::invokeMethod: No such method QQmlListModel_QML_6::append(QVarian .. (2020-06-17 14:29) 

感谢指导


查看完整版本: [-- C++中如何调用QML中listmodel的append函数 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled