QT学习系列:模型/视图框架

最近接触的项目中接触到了模型/视图框架,到网上找了一些材料,看的一知半解,把自己学到的一点东西以自己的理解做下记录

模型视图框架有三个很重要的概念

模型model:和数据打交道,用来组织数据

视图view:和用户打交道,通过联系指定的模型,将数据以特定格式显示给用户

委托delegate:用于控制用户交互的格式

从网上盗用一个图:


模型

所有的模型都基于QAbstractItemModel类

QT提供了一些现成的模型,用来处理数据:

QStringListModel:用来处理简单的QString列表项

QStandardItemModel:管理更复杂的树结构件,其中每一个项目可以包含任意数据

QFileSystemModel:提供有关本地文件系统的文件和目录信息

QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel:使用模型/视图约定来访问数据库。

如果这些标准模型不能满足要求,则可以继承化QAbstractItemModel、QAbstractListModel或QAbstractTableModel来创建自定义模型

视图

根据视图结构不同QT实现了三种视图类型:

QListView:简单的以列表形式显示数据

QTableView:以表格的形式显示数据

QTreeView:以分层次的树形结构显示数据

以上三个类都继承自QAbstractItemView类,如果以上三种视图满足不了要求,也可以自己继承实现

委托

讲真,委托这个我没有搞太明白,只是知道是控制用户交互方式的,比如说,一个表格中的单元格,你想更改其中的数据,

是输入字符串,还是有下拉框可以选择,亦或者是弹出时间框进行选择。就这样

QAbstractItemDelegate是委托的抽象基类,一般实现委托功能用一下方式

class MyStyleItemDelegate : public QStyleItemDelegate

{

    MyStyleItemDelegate();    // 构造

    // 当用户想要修改视图,这时候视图需要提供一个编辑器,视图会告知委托为被修改的项目提供一个编辑器部件

    // 此函数就是委托为视图提供编辑器的

    QWidget *createEdit(QWidget *parent, const QStyleOptionViewItem &option,

                                        const QModelIndex &index) const;

    // 为编辑器设置数据

    void setEditorData(QWidget *editor, const QModelIndex &index) const;

    // 将数据写入到模型

    void setModelData(QWidget *editor, QAbstractItemModel *model,

                                    const QModelIndex &index) const;

    // 更新编辑器的几何布局

    void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option,

                                                    const QModelIndex &index) const;

}

模型/视图框架的便捷类

QT提供了一些便捷类来使用模型/视图框架,所谓的简便类,其实是把模型和视图两个部件集成在了一起

QListWidget:以列表的形式显示数据

QTabWidget:以表格的形式显示数据

QTreeWidget:以树的形式显示数据

以下记录一些工作中用到的函数:

currentItem();    // 返回当前item

setCurrentItem();    // 这个不用说也知道是干什么的

setEditTriggers();    // 这是设置何种条件下触发item编辑,可传如下的参数

ConstantValueDescription
QAbstractItemView::NoEditTriggers0No editing possible.
QAbstractItemView::CurrentChanged1Editing start whenever current item changes.
QAbstractItemView::DoubleClicked2Editing starts when an item is double clicked.
QAbstractItemView::SelectedClicked4Editing starts when clicking on an already selected item.
QAbstractItemView::EditKeyPressed8Editing starts when the platform edit key has been pressed over an item.
QAbstractItemView::AnyKeyPressed16Editing starts when any key is pressed over an item.
QAbstractItemView::AllEditTriggers31Editing starts for all above actions.

item(int row, int col);       // 获取指定行列的item

setColumnWidth();          // 设置列宽


QTableWidgetItem

QTreeWidgetItem

QListWidgetItem       以上三个类是具体的项

此三个类常用函数:

childCount();    //  子项的个数

child(int index);    //第index个子项

setFlags (Qt::ItemFlags flags)    // 设置item状态,灰化,是否可编辑等

Qt::ItemFlags取值

ConstantValueDescription
Qt::NoItemFlags0It does not have any properties set.
Qt::ItemIsSelectable1It can be selected.
Qt::ItemIsEditable2It can be edited.
Qt::ItemIsDragEnabled4It can be dragged.
Qt::ItemIsDropEnabled8It can be used as a drop target.
Qt::ItemIsUserCheckable16It can be checked or unchecked by the user.
Qt::ItemIsEnabled32The user can interact with the item.
Qt::ItemIsTristate64The item is checkable with three separate states

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
本课程详细、全面地介绍了 Qt 开发中的各个技术细节,并且额外赠送在嵌入式端编写Qt程序的技巧。整个课程涵盖知识点非常多,知识模块囊括 Qt-Core 组件、QWidgets、多媒体、网络、绘图、数据库,超过200个 C++ 类的分析和使用,学完之后将拥有 Qt 图形界面开发的非常坚实的功底。 每个知识点不仅仅会通过视频讲解清楚,并且会配以精心安排的实验和作业,用来保证学习过程中切实掌握核心技术和概念,通过实验来巩固,通过实验来检验,实验与作业的目的是发现问题,发现技术盲点,通过答疑和沟通夯实技术技能。注意:本套视频教程来源于线下的实体班级,因此视频中有少量场景对话和学生问答,对此比较介意的亲们谨慎购买。注意:本套视频教程包含大量课堂源码,包含对应每个知识点的精心编排的作业。由于CSDN官方规定在课程介绍中不能出现作者的联系方式,因此在这里无法直接给出QQ答疑号,视频中的源码、资料和作业文档链接统一在购买后从CSDN平台跟我沟通,我会及时回复跟进。注意:本套视频教程包含全套10套作业题,覆盖所有视频知识点,循序渐进,各个击破,作业总纲如下:下面是部分作业题目展示,每道题都有知识点说明,是检验学习效果的一大利器:(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)…… ……

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值