问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

谁熟悉QTreeView+QAbstractItemModel 求救

发布网友 发布时间:2022-04-23 06:18

我来回答

1个回答

热心网友 时间:2023-10-03 06:55

谁熟悉QTreeView+QAbstractItemModel 求救
主要使用QTableView和QTableWidget中的三个函数实现

QTableView::verticalScrollBar()->setSliderPosition(); //设置当前滑动条的位置
QTableView::verticalScrollBar()->maximum(); //滑动条能移动的最大位置
QTableView::verticalScrollBar()->value(); //获得当前滑动条的位置

QTableWidget是一个表示二维离散数组的表格。它在给定维度里显示当前用户滚动的单元格。当用户在一个空的单元格中输入一些文本时,QTableWidget自动创建一个QTableWidgetItem对象保存输入的文本。

Qt 4推出了一组新的item view类,它们使用model/view结构来管理数据与表示层的关系。这种结构带来的
功能上的分离给了开发人员更大的弹性来定制数据项的表示,它也提供一个标准的model接口,使得更多的
数据源可以被这些item view使用。这里对model/view的结构进行了描述,结构中的每个组件都进行了解释,
给出了一些例子说明了提供的这些类如何使用。

Model/View 结构

Model-View-Controller(MVC), 是从Smalltalk发展而来的一种设计模式,常被用于构建用户界面。经典设计模式的著作中有这样的描述:

MVC 由三种对象组成。Model是应用程序对象,View是它的屏幕表示,Controller定义了用户界面如何对用户输入进行响应。在MVC之前,用户界面设计倾向于三者揉合在一起,MVC对它们进行了解耦,提高了灵活性与重用性。

假如把 view与controller结合在一起,结果就是model/view结构。这个结构依然是把数据存储与数据表示进行了分离,它与MVC都基于同样的思想,但它更简单一些。这种分离使得在几个不同的view上显示同一个数据成为可能,也可以重新实现新的view,而不必改变底层的数据结构。为了更灵活的对用户输入进行处理,引入了delegate这个概念。它的好处是,数据项的渲染与编程可以进行定制。

如上图所示,model与数据源通讯,并提供接口给结构中的别的组件使用。通讯的性质依赖于数据源的种类
与model实现的方式。view从model获取model indexes,后者是数据项的引用。通过把model indexes提供给model,view可以从数据源中获取数据。

在标准的 views中,delegate会对数据项进行渲染,当某个数据项被选中时,delegate通过model indexes与model直接进行交流。总的来说,model/view 相关类可以被分成上面所提到的三组:models,views,delegates。这些组件通过抽象类来定义,它们提供了共同的接口,在某些情况下,还提供了缺省的实现。抽象类意味着需要子类化以提供完整的其他组件希望的功能。这也允许实现定制的组件。models,views,delegates之间通过信号,槽机制来进行通讯:

从model发出的信号通知view数据源中的数据发生了改变。
从view发出的信号提供了有关被显示的数据项与用户交互的信息。
从delegate发生的信号被用于在编辑时通知model和view关于当前编辑器的状态信息。

Models

所有的item models都基于QAbstractItemModel类,这个类定义了用于views和delegates访问数据的接口。
数据本身不必存储在model,数据可被置于一个数据结构或另外的类,文件,数据库,或别的程序组件中。
关于model的基本概念在Model Classes部分中描述。
QAbstractItemModel提供给数据一个接口,它非常灵活,基本满足views的需要,无论数据用以下任何样的形式
表现,如tables,lists,trees。然而,当你重新实现一个model时,如果它基于table或list形式的数据结构,最好从QAbstractListModel,QAbstractTableModel开始做起,因为它们提供了适当的常规功能的缺省实现。这些类可以被子类化以支持特殊的定制需求。子类化model的过程在Create New Model部分讨论
QT提供了一些现成的models用于处理数据项:
QStringListModel 用于存储简单的QString列表。
QStandardItemModel 管理复杂的树型结构数据项,每项都可以包含任意数据。
QDirModel 提供本地文件系统中的文件与目录信息。
QSqlQueryModel, QSqlTableModel,QSqlRelationTableModel用来访问数据库。
假如这些标准Model不满足你的需要,你应该子类化QAbstractItemModel,QAbstractListModel或是
QAbstractTableModel来定制。

Views

不同的view都完整实现了各自的功能:QListView把数据显示为一个列表,QTableView把Model 中的数据以table的形式表现,QTreeView 用具有层次结构的列表来显示model中的数据。这些类都基于QAbstractItemView抽象基类,尽管这些类都是现成的,完整的进行了实现,但它们都可以用于子类化以便满足定制需求。

Delegates
QAbstractItemDelegate 是model/view架构中的用于delegate的抽象基类。缺省的delegate实现在QItemDelegate类中提供。它可以用于Qt标准views的缺省 delegate.

排序

在model/view架构中,有两种方法进行排序,选择哪种方法依赖于你的底层Model。
假如你的model是可排序的,也就是它重新实现了QAbstractItemModel::sort()函数,QTableView与QTreeView都提供了API,允许你以编程的方式对Model数据进行排序。另外,你也可以进行交互方式下的排序(例如,允许用户通过点击view表头的方式对数据进行排序),可以这样做:把QHeaderView::sectionClicked()信号与QTableView::sortByColum()槽或QTreeView::sortByColumn()槽进行联结就好了。
另一种方法是,假如你的model没有提供需要的接口或是你想用list view表示数据,可以用一个代理
model在用view表示数据之前对你的model数据结构进行转换。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
水笔在手上画画会不会被衣服搽掉下来 老人每天大便次数很多量不多也不稀,每天还会拉三四次水应经三个月了... 从大连飞机场怎么去大连经济开发区5彩城K区的大连金港大酒店 除了打 ... 请问从大连周水子国际机场到经济技术开发区怎么走最省钱? 中国古代名刀总录中国古代十大名刀 怎样把qq安装到iphone里面 苏科大什么梗 苏科大叫什么名字 lol苏科大是苏州科技大学的吗 lol苏州科技大学为什么这么厉害 优尔精医用降温贴是不是保健品? 劳务派遣员工转成正式员工申请怎么写 快手上没有八卦,怎样才能看到我关注的人关注了谁 使用不同型号的内存条,会烧坏电脑主板吗? 质量不好的内存条会烧主板吗 劳务派遣证要怎么办理? 开机插拔内存条会烧主板吗? 快手八卦是什么,我很想知道快手好友最近浏览过谁,怎么看,帮帮忙,谢谢 知道微信昵称怎么查? 内存条插错会导致主板被烧坏吗 只知道微信昵称怎么能查到手机号码或 快手动态在哪里? 为什么加内存条的时候有可能会烧掉主板? 如何申请劳务派遣经营许可证如何办理劳务派遣证 知道码和微信网名能找到手机号码吗? 如何成为快手热榜? 内存条插的不好会烧坏主板吗? 分号的用法是什么? ;分号 快手如何上热搜榜? 两根内存条同时使用会烧坏主板吗 本人为劳务派遣工,用工单位以本人违反单位规章制度为由将本人退派,用工单位误导本人签了份辞职申请书, 快手里八卦怎么看不到关注的人的八卦什么原因 全日制劳务工退休要具备哪些材料? 如何办理劳务派遣 如何获取Qlistview的多行选中状态 劳务派遣工的入党申请书应该交到哪里? QListView和QListWidget的区别 申请劳务派遣许可证需要什么条件 qlistview qlistwidget 如何自动滚动到最下方 劳务派遣怎么办理 安徽省安庆市同城县旅游景点 劳务派遣经营许可证申请书里的申请事由怎样填写?谢谢各位好心人 水晶泥怎么做呀? 宽带报错629怎么处理? 怎么找同城的结伴旅行? 如何简单做出水晶泥? 宽带错误629:连接被远程计算机终止什么意思? 同程网如何订旅游景点门票啊 怎么才能做水晶泥??? 找附近的旅游景点用什么软件 周末同城游去哪里旅游?