Ⅰ.2.6.3.2 如何测试 QListViews(QAbstractItemModels 和 QItemSelectionModels)中的 Items

原创 2015年11月17日 16:09:54

view 类本身不保存任何数据,相反的它们可以显示model中数据。因此如果我们想要访问与一个view相关的所有items,我们必须首先获取该view的model,然后遍历model中的items。而且,在一个选择器model中,选择器独立于model。这是因为选择器事关视觉交互,不会影响底层数据。(当然用户可以选择然后改变所选内容,但是从数据model看来,这种改变简单的应用于一个或更多items,同时model不知道或不关心这些items是如何被选择的。)

 Example 6.7 The tst_listView Test Script

def main():
    startApplication("itemviews")
    listViewName = "{type='QListView' unnamed='1' visible='1'}"
    listView = waitForObject(listViewName)
    model = listView.model()
    selectionModel = listView.selectionModel()
    for row in range(model.rowCount()):
        index = model.index(row, 0)
        text = model.data(index).toString()
        checked = selected = ""
        checkState = model.data(index, Qt.CheckStateRole).toInt()
        if checkState == Qt.Checked:
            checked = " +checked"
        if selectionModel.isSelected(index):
            selected = " +selected"
        test.log("(%d) '%s'%s%s" %(row, text,checked, selected))
注意到model中所有的数据都是通过QModelIndex访问的。一个model index有三个属性:row,column 和 parent。对于lists,只是用到row;对于tables,用到了row和column;对于trees,三个属性都用到了。

也要注意checked状态是data的一个属性,因此我们使用QAbstractItemModel.data方法访问它。(当我们使用这个方法但没有指定role时,role被设置成通常保存item的text的Qt.DisplayRole。)QAbstractItemModel.data方法返回一个QVariant 变量,因此在使用它之前我们必须常常将它转换成正确的类型。

在这个小部分和2.6.3.1 中,我们了解了如何遍历list widgets和 list views以检查每个item。在接下来两个小部分我们将为 table widgets 和 table views 写出相似的测试。另外,我们展示如何用数据填充table widget,同样的方法适用于填充list 或者 tree widgets。不会展示填充models,因为和本文的例子相似。我们简单的调用每个item的QAbsctractItemModel.setData方法,该item能提供一个合适的model index、role 和 value。


版权声明:本文为博主原创文章,未经博主允许不得转载。

Qlistview用法例子

//model有以下几种: // QStringListModel                   存储一组字符串 // QStandardItemModel            存储任意层...
  • lishenglong666
  • lishenglong666
  • 2012年06月14日 14:38
  • 10329

Qt 学习: 视图选择 (QItemSelectionModel)

博主QQ:1356438802 选择是视图中常用的一个操作。在列表、树或者表格中,通过鼠标点击可以选中某一项,被选中项会变成高亮或者反色。在 Qt 中,选择也是使用了一种模型。在 model/...
  • luoyouren
  • luoyouren
  • 2016年04月13日 11:04
  • 2081

qListView 和 qStandardItemModel

qListView中添加数据使用的是qStandardItemModel,操作是 lv = QListView(); sim = QStandardItemModel(); lv.setMode...
  • u010640235
  • u010640235
  • 2015年03月03日 13:58
  • 1036

QListView 和 QStandardItemModel的使用

实际上用这两个类也就创建了一个list,先看下实现的是一个什么样的东西                            代码如下: .cpp #include "MyWidget.h" #in...
  • zgjxhgh
  • zgjxhgh
  • 2012年03月29日 16:18
  • 5152

QListView,QTreeView和 QStandardItemModel的简单使用

//model有以下几种: // QStringListModel                   存储一组字符串 // QStandardItemModel            存储任意层...
  • liulihuo_gyh
  • liulihuo_gyh
  • 2012年11月12日 10:45
  • 2336

QT中QListView中放置自定义控件并添加滚动条

转载 http://zhouzhenren163.blog.163.com/blog/static/6549928120140605729334/  效果如下图所示: 代码如下: unt...
  • ljt350740378
  • ljt350740378
  • 2015年12月03日 17:48
  • 5234

Qt之QListView

    QT提供了model/view 结构来管理数据与展示数据。    对于搞J2ee开发的,MVC是再熟悉不过了,Model,View,Controller,qt的model/view模式跟MvC...
  • liuhongwei123888
  • liuhongwei123888
  • 2010年12月23日 02:43
  • 48797

QListView和QListWidget

今天搞了一个早上,终于弄清楚了。QListView是基于Model,而QListWidget是基于Item。这是它们的本质区别。往QListView中添加条目需借助QAbstractListModel...
  • leaf6094189
  • leaf6094189
  • 2010年08月11日 12:57
  • 16216

Qt学习:项视图类之QStringListModel和QListView

QListView是不显示表头和表框的,如果要显示,可以使用QTreeView来     view的显示属性分为列表list显示和icon图标显示,使用     QListView::setV...
  • bcs_01
  • bcs_01
  • 2013年05月20日 18:19
  • 4456

qt view是如何显示model中的数据

在model/view架构中,view从model中获得数据项然后显示给用户。数据显示的方式不必与model提供的表示方式相同,可以与底层存储数据项的数据结构完全不同。   内容与显式的分离是通...
  • zhangbinsijifeng
  • zhangbinsijifeng
  • 2015年09月30日 14:21
  • 1506
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ⅰ.2.6.3.2 如何测试 QListViews(QAbstractItemModels 和 QItemSelectionModels)中的 Items
举报原因:
原因补充:

(最多只允许输入30个字)