zoukankan      html  css  js  c++  java
  • 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 ;

    具体源码助手上有说明,下面是效果图。

    效果如上。

    
    
  • 相关阅读:
    十四、内部类
    十三、模板设计模式
    十二、面向对象之多态
    三、泛型
    Spring Security学习笔记
    Maven构建web项目在Eclipse中部署的几种方法
    spring如何实现定时任务
    安装jar包到本地仓库
    使用java对pdf转成tiff文件
    word文档转pdf解决修订问题
  • 原文地址:https://www.cnblogs.com/liuruoqian/p/6046813.html
Copyright © 2011-2022 走看看