实习刚才是一段时间,公司这边就要求熟悉这个 mvc。一般开始都是用 tableview,前面的 blog 我都是使用 listview 居多,并且相对 delegate 这个使用的多余 model。接下来说下 model。
tableview 简单说下就是多行多列的表格,使用起来是很简单,添加数据直接 insert 即可【@官网手册】
但是简单的 tableview 往往不能满足我们的需求这时候就用到模型。model。一般有标准的 model,tableviewmodel,不过大都是继承于 qabstractitemmodel。
用法大同小异,
都需要给模型配置合适的数据源 :一般 QStringlist,或者 QMap、QHash 等存储结构去保存数据源,
然后从继承的 model 去重写一下几个方法,来初始化 view 上的面数据,以及更新 model 的数据还有返回 delegate 的数据,重写 & 自定义方法
int rowCount(); // 返回 view 上设置的行
int columnCount(); // 返回 view 上设置的列
QVariant data(); // 返回 view 上设置的 data
QVariant headerData();// 返回 view 上设置的表头 [一般可以隐藏如要求高,好看一些,一般数据显示不隐藏]
bool setdata(); // 返回的数据设置更新到 model
void reset(); // 刷新 model 自定义方法
void addData(); // 添加数据源 自定义方法
Qt::ItemFlags QAbstractItemModel::flags () // 设置代理的属性,可编辑可选中等!
这样就能简单的实现 view+model 了。
接下来是加入 delegate。即实现 view 中的复选框,下拉框等。
继承于 QItemDelegate 一般情况下是,还有 qstyleitemdelegate,前者已够用两者差不多。
重写以下几个方法去创建对应的控件,赋初值并且显示。
/* 创建控件 */
- QWidget* createEditor(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;
- 具体源码助手上有说明,下面是效果图。
效果如上。
百度搜索 "就爱阅读", 专业资料, 生活学习, 尽在就爱阅读网 92to.com, 您的在线图书馆!
来源: http://www.92to.com/bangong/2017/08-03/26222646.html