• 6229阅读
  • 6回复

[提问]关于QListView的数据绑定功能? [复制链接]

上一主题 下一主题
离线wangqiguo__
 
只看楼主 倒序阅读 楼主  发表于: 2011-05-06
大家好,请问QListView中有没有类似的数据绑定的功能,例如我定义了这么一个Model类用来持有数据:
class Student
{
  public:
     char *name;
     int age;
     char * address;
}
我从数据库中查询出了约10条记录,并且将这些记录通过Student类持有,放在一个数组里面,例如:
Student stulist[10]=xxx;
stulist[0].name
stulist[0].age
stulist[0].address
可以通过类似的语句来访问每一条记录的相关字段的数据,现在需要将这个stulist绑定带一个QListView中显示
界面上显示的是name也就是学生的名字,但是不能显示学生的年龄和地址。当用户单击学生的名字的时候,在事件里面得到当前单击的Item,并且得到当前Item关联的Student对象,通过此Student对象取出其年龄和地址。

在C#里面的数据绑定控件中,例如一个列表控件中的每一项,都可以持有一个数据类的。QListView中的每一项是否能与我自己写的一个类兑现进行关联呢,例如上面的Studnet对象。不知道大家是怎么做的,其实主要的目的就是,在QListView中显示在界面上的东西是给用户看的,但是有些东西是不需要显示在界面上的,但是当用户单击这一项之后在事件处理的时候有需要这个数据,这个时候此数据该怎么得到?

就好比上面的例子,现在有10个学生的数据,每个学生有很多数据,如姓名,性别,身份证,地址,学分等。但是在QListView的列表中我只要显示学生的姓名,当用户单击这个姓名项之后,我在slot中进行处理的时候,有需要得到此时这个学生的身份证。
离线wangqiguo__
只看该作者 1楼 发表于: 2011-05-06
大家知不知道好歹回个话啊。急啊
离线wangqiguo__
只看该作者 2楼 发表于: 2011-05-06
难道QListView只能简单的显示一个字符串的列表,大家都没有碰到过类似的应用吗,这种应用应该是很普遍的啊? 例如如果现在需要删除一个学生记录,肯定会通过学生的id或者学号之类的进行删除,但是这些东西恰好是不显示在QListView 的界面上的,如何得到当前点击的学生姓名对应的id或者学号?
离线ppdayz

只看该作者 3楼 发表于: 2011-05-07
办法很多,数据不大的话可以setdata(qt::userRole, xxxxx);
像楼主这种情况,建议先建立个database,因为要这样数据查询很方便,
然后设置QListView的modle
离线wangqiguo__
只看该作者 4楼 发表于: 2011-05-09
回 3楼(ppdayz) 的帖子
你好,你的意思是说将学生的id放在这个setdata()里面,将学生的姓名显示在界面上,当点击姓名的时候就用这个id 去查询这个学生的其他数据吗? 没有别的办法吗,我就是希望减少数据的查询才将数据的结果保存在一个list列表结构里面的,要不然用户每单击一个item都要去数据库中查询一次,这是不是太频繁了?
离线ppdayz

只看该作者 5楼 发表于: 2011-05-09
回 4楼(wangqiguo__) 的帖子
用qmap或者qhash绑定你试试,就是
QHash<QTreeViewtItem *, Student> studentForItem;
把item和结构体利用map或者hash绑定在一起
离线wangqiguo__
只看该作者 6楼 发表于: 2011-05-09
回 5楼(ppdayz) 的帖子
这样不行的哦。你这样只是做了一个对应关系,对我来说没有意义啊,你绑定的这个数据结构已经相对独立了,而且也不是很好用。我希望是实现类似的效果:
on_qtreeViewItem_cliced(ItemClickedEvent e)
{
  Student stu=(Student)(e.data); //此时这个stu对象是与特定的QTreeViewItem有关联的。
  stu.id ..
  stu.name...
  stu.age...
}
快速回复
限100 字节
 
上一个 下一个