實習剛才是一段時間,公司這邊就要求熟悉這個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 ;
具體源碼助手上有說明,下面是效果圖。
效果如上。