实习刚才是一段时间,公司这边就要求熟悉这个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 ; 效果如上。 |
|
来自: 昵称19447302 > 《QT开发》