关闭

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

280人阅读 评论(0) 收藏 举报
分类:

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。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:38731次
    • 积分:1164
    • 等级:
    • 排名:千里之外
    • 原创:78篇
    • 转载:0篇
    • 译文:2篇
    • 评论:2条
    文章分类
    最新评论