Qt MVC(模型-視圖-代理)


  實習剛才是一段時間,公司這邊就要求熟悉這個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 ;

具體源碼助手上有說明,下面是效果圖。

效果如上。

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM