• 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 ;

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

    效果如上。

    
    
  • 相关阅读:
    Python 基础之 线程与进程
    python 基础之 模块
    Python 基础之socket编程(三)
    Python 基础之socket编程(二)
    Python全栈开发之11、进程和线程
    用 Python实现一个ftp+CRT(不用ftplib)
    Python全栈开发之10、网络编程
    Python全栈开发之9、面向对象、元类以及单例
    Python全栈开发之8、装饰器详解
    用python实现一个无界面的2048
  • 原文地址:https://www.cnblogs.com/liuruoqian/p/6046813.html
Copyright © 2020-2023  润新知