Qt 视图类

20 篇文章 0 订阅
5 篇文章 0 订阅

基本概念

在MV架构中,视图包含了模型中的数据项,并将它们呈现给用户。数据项的表示方法,可能和数据项在存储时用的数据结构完全不同。

这种内容与表现分离之所以能够实现,是因为使用了

  1. QAbstractItemModel提供的一个标准模型接口;
  2. 一个标准视图接口;
  3. 模型索引所提供的一种通用的方法;

来表示数据。

视图通常管理从模型获取数据的整体布局。视图可以自己渲染独立的数据项,也可以使用委托来处理渲染和编辑。

项目导航和选择行为

除了呈现数据,视图还处理项目间的导航,以及项目选择的某些方面。
表1和表2分别罗列了视图中的选择行为(QAbstractItemView::SelectionBehaviour)和选择模式(QAbstractItemView::SelectionMode

表1 视图类的选择行为(QAbstractItemView::SelectionBehaviour)

常量描述
QAbstractItemView::SelectItems选择单个项目
QAbstractItemView::SelectRows只选择行
QAbstractItemView::SelectColumns只选择列

表2 视图类的选择模式

常量描述
QAbstractItemView::SingleSelection当用户选择一个项目,索所有已选择的项目将成为未选择态,而且用户无法在已经选择的项目上单击来取消选择。
QAbstractItemView::ContiguousSelection如果用户在单击一个项目的同时按着Shift键,所有在当前和单击项目之间的项目都将被选择或者取消选择,这依赖于被单击项目的状态。
QAbstractItemView::ExtendedSelection具有ConiguousSelection的特性,而且还可以按着Ctrl键进行不连续的选择。
QAbstractItemView::MultiSelection用户选择一个项目时,不影响其他已经选择的项目。
QAbstractItemView::NoSelection项目无法被选择。

对于一些视图,例如QTreeViewQTreeView,在显示项目的同时还可以显示表头。这是通过QHeaderView类来实现的,它们使用QAbstractItemModel::headerData()从模型中获取数据,然后一般使用一个标签来显示表头信息。可以通过子类化QHeaderView来设置标签的显示。

Qt中已经提供了QListView,QTableViewQTreeView这三个现成的视图,不过都是使用规范的格式显示数据。
如果想要实现条形图、饼状图等特殊显示方式,需要重新实现视图。

项目选择

MV架构对项目的选择提供了非常方便的处理方法。
视图中被选择的项目的信息,存储在一个QItemSelectionModel实例中,这样被选择的项目模型索引便保持在一个独立的模型中,与所有的视图都是独立的。

当在一个模型上设置多个视图时,就可以实现在多个视图之间共享选择

选择由选择范围指定,只需要记录每一个选择范围开始和结束的模型索引即可,非连续的选择可以使用多个选择范围来描述。
选择可以看作是在选择模型中保存的一个模型索引集合,最近的项目选择被称为当前选择。

1. 当前项目、被选择项目

视图中总是有一个当前项目和一个被选择的项目,两者是独立的状态。

在同一时间,一个项目可以既是当前项目,同时也是被选择项目。视图负责确保总是有一个项目作为当前项目来实现键盘导航。

表3 当前项目和被选择的项目的区别

当前项目被选择的项目
只能有一个当前项目被选择的项目
使用键盘导航键或者鼠标按键可以改变当前项目项目是否处于被选择状态,取决于几个预先定义好的模式,例如单项选择、多重选择等。
如果按下F2键或者双击都可以编辑当前项目当前项目可以通过指定一个范围来一起被使用
当前项目会显示焦点矩形被选择的项目会使用选择矩形来表示

当操作选择时,可以将QItemnSelectionModel看作一个项目模型中所有项目的选择状态的一个记录。
一旦设置了一个选择模型,所有的项目集合都可以被选择、取消选择或者切换选择状态,而不需要知道哪一个项目已经被选择了。所有被选择项目的索引都可以被随时进行检索,其他的组件也可以通过信号和槽机制来获取选择模型的改变信息。

2. 选择模型

标准的视图类中提供了默认的选择模型,可以在大多数的应用中直接使用。
属于一个视图的选择模型可以使用这个视图的selectionModel()函数获得,而且还可以在多个视图之间使用setSelectionModel()函数来共享该选择模型,所以一般是不需要重新构建一个选择模型的。

代码实例

  • 待办

参考资料: Qt Creator快速入门第2版 (霍亚飞 著)

  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt 视图是为了方便用户在 GUI 界面上显示和操作数据而设计的。常见的 Qt 视图有 QListView、QTableView、QTreeView 等。下面介绍一些常用的成员函数: 1. setModel():设置视图的数据模型,数据模型是 Qt 中 MVC(Model-View-Controller)模式的核心。 2. setSelectionModel():设置视图的选择模型,选择模型是管理视图中哪些项被选中的对象。 3. setEditTriggers():设置视图的编辑触发方式,例如双击、单击等。 4. setSelectionMode():设置视图的选择模式,包括单选、多选等。 5. setSortingEnabled():设置是否启用视图中的排序功能。 6. setHorizontalHeader()、setVerticalHeader():设置视图中的水平和垂直表头。 7. setColumnWidth()、setRowHeight():设置列宽和行高。 8. scrollTo():将指定的项滚动到视图中心。 9. indexAt():返回当前鼠标位置下的项的索引。 10. selectedIndexes():返回当前选中项的索引列表。 11. resizeColumnsToContents()、resizeRowsToContents():自适应调整列宽和行高。 12. setItemDelegate():设置项的代理,用于自定义项的外观和行为。 13. horizontalScrollBar()、verticalScrollBar():返回水平和垂直滚动条对象。 14. setHorizontalScrollMode()、setVerticalScrollMode():设置水平和垂直滚动条的显示模式。 15. setDragEnabled()、setAcceptDrops():设置是否支持拖放操作。 总之,Qt 视图提供了丰富的功能和接口,可以满足不同的需求。开发者可以根据自己的具体情况选择合适的视图,并灵活运用其成员函数来实现所需的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

barbyQAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值