模型视图设计模式的核心思想
使模型(数据)与视图(显示)相分离
模型只需要对外提供标准接口存取数据,无需数据如何显示
视图只需要自定义数据的显示方式,无需数据如何组织存储
当数据发生改变时,会通过信号通知视图
当用户与视图进行交互时,会通过信号向模型发送交互信息
其中QStandardItemModel的常见子类有:
QAbstractListModel:用来创建一维列表模型
QStandardItemModel:用来存储定制数据的通用模型
QAbstractTableModel: 用来创建二维列表模型
在Qt中,不管模型以什么结构组织数据,都必须为每个数据提供不同的索引值,使得视图能通过索引值访问模型中的具体数据
效果:
其中index()是个重载函数,用来获取QModelIndex 索引值,完整的index()函数如下所示:
以QFileSystemModel为例:
也可以通过index索引值来查找数据,以QFileSystemModel模型为例, 与index相关的成员函数有:
其中data ()和setData()函数的参数role是模型数据角色
role 数据角色
当role值不同时,则显示在视图上的方式也会不同
对于role角色,常用的值有:
Qt::DisplayRole 0 以文本方式显示数据(QString)
Qt::DecorationRole 1 将数据作为图标来装饰(QIcon,QPixmap)
Qt::EditRole 2 可编辑的数据信息显示(QString)
Qt::ToolTipRole 3 作为工具提示显示(QString)
Qt::StatusTipRole 4 作为状态栏中显示的数据(QString)
Qt::WhatsThisRole 5 作为帮助信息栏中显示的数据(QString)
Qt::FontRole 6 设置字体(QFont)
Qt::TextAlignmentRole 7 设置模型数据的文本对齐(Qt::AlignmentFlag)
Qt::BackgroundRole 8 设置模型数据的背景色(QBrush)
Qt::ForegroundRole 9 设置模型数据的前景色,比如字体(QBrush)
以QTableView为例
效果:
接下来开始学习模型视图中的委托