请教c++写好的mode如何动态的绑定到指定的Qml页的ListModel中

Lovely_baby 2013-09-10 02:03:27
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));
没能绑定成功,请教如何绑定?新手多谢指教。
...全文
438 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
luoming0721 2013-11-23
  • 打赏
  • 举报
回复
引用
引用 5 楼 bug1986 的回复: Quote: 引用 4 楼 Lovely_baby 的回复: Quote: 引用 3 楼 bug1986 的回复: 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() }
楼主可以借鉴下你的实现方式不 我这也纠结了好久
luoming0721 2013-11-23
  • 打赏
  • 举报
回复
引用
dataList的具体写法可以参考abstractitemmodel的例子,这里这个datalist是一个QStringList还是一个model?如果返回QStringList倒是可以返回,但是QML显示不了,如果C++返回model,返回不了啊,难道非得要自己去实现一个类似abstractitemmodel的类么
bug1986 2013-09-13
  • 打赏
  • 举报
回复
我也是5.1.0,中文能正常显示,中文直接写在qml里的
懒懒的吉他手 2013-09-13
  • 打赏
  • 举报
回复
中文一直是个纠结的问题,看看有没有可能编码的问题
bug1986 2013-09-12
  • 打赏
  • 举报
回复
引用 4 楼 Lovely_baby 的回复:
[quote=引用 3 楼 bug1986 的回复:] 1楼说的没错,参考那个例子也实现一个listmodel,然后在c++中把那个listmodel返回,qml直接用listview的model去等于那个函数的返回值
你好 BookFeeds.qml页有一个ListModel {id: bookFeeds model: myModel} 我现在在main.cpp已经获取到一个dataList了,该怎么绑定呢?我上边的那种写法没起作用[/quote] 首先你要有个一类用于保存你获得的那个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() }
Lovely_baby 2013-09-12
  • 打赏
  • 举报
回复
引用 5 楼 bug1986 的回复:
[quote=引用 4 楼 Lovely_baby 的回复:] [quote=引用 3 楼 bug1986 的回复:] 1楼说的没错,参考那个例子也实现一个listmodel,然后在c++中把那个listmodel返回,qml直接用listview的model去等于那个函数的返回值
你好 BookFeeds.qml页有一个ListModel {id: bookFeeds model: myModel} 我现在在main.cpp已经获取到一个dataList了,该怎么绑定呢?我上边的那种写法没起作用[/quote] 首先你要有个一类用于保存你获得的那个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() } [/quote] 多谢,这个搞定了!在请教个问题,qt5.1.0版本 中文信息绑定到qml中不显示,您遇到过吗?
Lovely_baby 2013-09-11
  • 打赏
  • 举报
回复
引用 3 楼 bug1986 的回复:
1楼说的没错,参考那个例子也实现一个listmodel,然后在c++中把那个listmodel返回,qml直接用listview的model去等于那个函数的返回值
你好 BookFeeds.qml页有一个ListModel {id: bookFeeds model: myModel} 我现在在main.cpp已经获取到一个dataList了,该怎么绑定呢?我上边的那种写法没起作用
bug1986 2013-09-11
  • 打赏
  • 举报
回复
1楼说的没错,参考那个例子也实现一个listmodel,然后在c++中把那个listmodel返回,qml直接用listview的model去等于那个函数的返回值
Lovely_baby 2013-09-10
  • 打赏
  • 举报
回复
呃 没人回答了吗?
懒懒的吉他手 2013-09-10
  • 打赏
  • 举报
回复
我前几天也有一样的问题,后来看了这个有点启发,自带的实例,你试试,我也是新手 (QTDIR)\examples\declarative\modelviews\abstractitemmodel

16,173

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧