今天学的东西比较多,先整理下今天的东西。
因为Qt的版本更新比较多,工程的配置文件的格式不同,可能会出现一些比较意想不到的问题,
1 今天在编译一个工程时出现 不能包含头文件的情况,在修改了工程的配置文件之后解决,配置文件是后缀为.pro的文件以记事本打开就可以很清楚看到里面的内容, 按格式修改即可。一般添加下面的语段可以解决:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
首先是类关系图
2 在学习自定义模型(Model的中,有几点是比较重要的,
A 自制List和Table模型分别继承ListModel和TableModel类
如果是自制的树形模型TreeModel,则需要从QAbstractItemModel继承。
B 几个概念:一个model中的每个数据元素都有一个model索引。这个索引指明这个数据位于model的位置,比如行、列等。这就是前面我们曾经说到过的QModelIndex。每个数据元素还要有一组属性值,称为角色(roles)。这个属性值并不是数据的内容,而是它的属性,比如说,这个数据是用来展示数据的,还是用于显示列头的?因此,这组属性值实际上是Qt的一个enum定义的,比较常见的有Qt::DisplayRole和Qt::EditRole,另外还有Qt::ToolTipRole, Qt::StatusTipRole, 和Qt::WhatsThisRole等。并且,还有一些属性是用来描述基本的展现属性的,比如Qt::FontRole, Qt::TextAlignmentRole, Qt::TextColorRole, Qt::BackgroundColorRole等。
C 需要重写自己Model的一些格式函数最基本的有如下几个:
int rowCount(const QModelIndex &parent) const;///行
int columnCount(const QModelIndex &parent) const; //列
QVariant data(const QModelIndex &index,int role) const;
//返回index坐标的值
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
//返回指定的role和section区内的值
bool QAbstractItemModel::setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole)
//在指定的index下面输入数据 并出发View更改数据显示。
D 用QAbstractItemView Class下面对应的view类显示即可,
E 对于每个Model一般需要一个容器记录Model里面的数据,例如TableModel一般对应QMap容易,ListModel对应QList容器,所以需要先了解下容器的一般用法,不过应该是与c++的标准库的用法大致相同。
F 在明白了整个结构之后,就是程序细节方面的问题,即每个函数是如何实现的,这个可以边学边做。
基本上就是这样,如果有发现不对的地方,请批评指出。