当前位置: 代码迷 >> QT开发 >> 请问c++写好的mode怎么动态的绑定到指定的Qml页的ListModel中
  详细解决方案

请问c++写好的mode怎么动态的绑定到指定的Qml页的ListModel中

热度:69   发布时间:2016-04-25 03:40:10.0
请教c++写好的mode如何动态的绑定到指定的Qml页的ListModel中
QList<QObject*> dataList;定义了一个model,内容是Name,value键值对的形式

BookFeeds.qml页有一个ListModel {id: bookFeeds}

在qt5.1.0中通过:
QQuickView view;
QQmlContext *ctxt = view.rootContext();
ctxt->setContextProperty("bookFeeds", QVariant::fromValue(dataList));
没能绑定成功,请教如何绑定?新手多谢指教。
c++ qt5

------解决方案--------------------
我前几天也有一样的问题,后来看了这个有点启发,自带的实例,你试试,我也是新手
(QTDIR)\examples\declarative\modelviews\abstractitemmodel

------解决方案--------------------
引用:
Quote: 引用:

1楼说的没错,参考那个例子也实现一个listmodel,然后在c++中把那个listmodel返回,qml直接用listview的model去等于那个函数的返回值

你好 
BookFeeds.qml页有一个ListModel {id: bookFeeds 
                                model: myModel}
我现在在main.cpp已经获取到一个dataList了,该怎么绑定呢?我上边的那种写法没起作用


首先你要有个一类用于保存你获得的那个dataList,然后在这个类里写一个函数把dataList作为返回值返回,如getDataList,这个函数在定义的时候要加Q_INVOKABLE宏,这样才能保证在qml中会调到这个函数。dataList的具体写法可以参考abstractitemmodel的例子
接下来在c++注册保存list的那个类,就像你上面写的,一样。
如:DataBaseManager* database = new DataBaseManager();
    QQuickView view;
    QQmlContext *ctxt = view.rootContext();
    ctxt->setContextProperty("dbmanager", QVariant::fromValue(database));

最后在qml里的,绑定list,这样你每次操作dataList界面就会同时同步了
ListView
{
id:list
model:dbmanager.getDataList()
}

  相关解决方案