首页 > 代码库 > qt视图选择

qt视图选择

 

# -*- coding: utf-8 -*-

# python:2.x

__author__ = ‘Administrator‘

from PyQt4.Qt import *

from PyQt4.QtGui import *

from PyQt4.QtCore import *

import sys,os

"""

在列表、树或者表格中,通过鼠标点击可以选中某一项,被选中项会变成高亮或者反色。选择也是使用了一种模型。在 model/view 架构中,这种选择模型提供了一种更通用的对选择操作的描述。

QItemSelectionModel 类获取视图中项目的选择情况。这个模型保持有项目的索引,并且独立于任何视图。这意味着,我们可以让不同的视图共享同一个选择模型,从来达到一种同步操作的目的。选择由选择区域组成。模型只将选区的开始和结束的索引位置记录下来,以保证对于很大的选区也有很好的性能。非连续选区则由多个连续选择组成。

当前项 选择项

只能有一个当前项。 可以有多个选择项。

使用键盘或者鼠标点击可以改变当前项。 选择项使用两种状态:选择和未选择,这取决于项目之前的状态和其它一些设置,例如,单选或多选。只有在用户进行交互的时候,这种状态才会发生改变。

当前项可以使用 F2 或者鼠标双击进行编辑(前提是程序允许)。 当前项可以结合另外一个锚点指定被选择或者去除选择的一块选区(或二者的结合)。

当前项通常会有一个焦点框进行标识。 选择项使用选区颜色进行标识。

在处理选择的时候,我们可以将 QItemSelectionModel 当成数据模型中所有数据项的选择状态的一个记录。一旦选择模型创建好,这些数据项就可以在不知道哪些项被选择的情况下进行选择、取消选择或者改变选择状态的操作。所有被选择项的索引都在可随时更改,其它组件也可以通过信号槽机制修改这些选择的信息。

 

标准视图类(QListView、QTreeView 以及 QTableView)已经提供了默认的选择模型,足以满足大多数应用程序的需求。某一个视图的选择模型可以通过 selectionModel() 函数获取,然后使用 setSelectionModel() 提供给其它视图共享,因此,一般没有必要新建选择模型。

 

如果需要创建一个选区,我们需要指定一个模型以及一对索引,使用这些数据创建一个 QItemSelection 对象。这两个索引应该指向给定的模型中的数据,并且作为一个块状选区的左上角和右下角的索引。为了将选区应用到模型上,需要将选区提交到选择模型。这种操作有多种实现,对于现有选择模型有着不同的影响。

 

"""

class SysTem(QWidget):

    def __init__(self,parent=None):#初始化

        super(SysTem,self).__init__(parent)

        #创建32个数据项表格模型

        tableWidget=QTableWidget(self)

        tableWidget.setColumnCount(8)

        tableWidget.setRowCount(4)

        tableWidget.setFixedSize(500,200)

        selectionmodel=tableWidget.selectedItems()

        #选择表格上一些单元格

        topleft=tableWidget.model().index(0,0,QModelIndex())

        botomright=tableWidget.model().index(5,2,QModelIndex())

        #获取指定的索引定义为选区,使用QItemSelection 对象,然后将其赋值给我们获取的选择模型:

        toggleSelection=QItemSelection()

        toggleSelection.select(topleft,botomright)

        #默认情况下,选择操作会只会影响到指定的模型索引。但是,我们也可以改变这一设置。例如,只选择整行或者整列

        # columnSelection=QItemSelection()

        # columnSelection.select(topleft,botomright)

        # selectionmodel.select(columnSelection,QItemSelectionModel.Select|QItemSelectionModel.Columns)

        # rowSelection=QItemSelection()

        # rowSelection.select(topleft,botomright)

        # selectionmodel.select(rowSelection,QItemSelectionModel.Select|QItemSelectionModel.Rows)

        #然使用两个索引设置了一个区域,但是,在选择的使用我们使用了QItemSelectionModel::Rows 和 QItemSelectionModel::Columns 这两个参数

        # 使用 QItemSelectionModel::Current 参数可以将当前选区替换为新的选区;使用

        # QItemSelectionModel::Clear 则会将原来已有的选区全部取消。为了进行全选,我们可以设置选区为左上角和右下角两个索引:

app=QApplication(sys.argv)

system=SysTem()

system.show()

sys.exit(app.exec_())

如图:

地址:http://www.tuicool.com/articles/736zaa