zoukankan      html  css  js  c++  java
  • 26.QT-模型视图之自定义委托

          在上一章学习 25.QT-模型视图 后,本章接着学习视图委托


    <span "="" src="https://images2018.cnblogs.com/blog/1182576/201806/1182576-20180615112117897-1789509195.png">

    初探自定义委托类 

    • 委托属于视图的子功能
    • 视图主要负责组织具体数据项的显示方式(是列表方式,还是树形方式,还是表格方式)
    • 委托主要负责具体数据项的显示和编辑,比如用户需要编辑某个数据时,则需要弹出编辑框
    • 视图可以通过 itemDelegate() ,setItemDelegate ( )成员函数来 获得/设置当前委托对象
    • QAbstractItemDelegate类是所有委托的父类,用来 负责提供通用接口
    • 在模型视图中,会默认提供一个QStyledItemDelegate类,供用户编辑数据
    • 也可以通过继承QItemDelegate父类,实现自定义委托功能

    QAbstractItemDelegate类中的关键虚函数

    QAbstractItemDelegate类中的关键信号

    我们以编辑某个数据项为例:

    • 视图首先会调用createEditor()函数生成编辑器
    • 调用updateEditorGeometry()函数设置编辑器组件大小
    • 调用setEditorData()函数,将模型里的数据提取到编辑器中
    • 等待用户编辑... ...
    • 当用户编辑完成后, 系统将会发送commitData信号函数
    • 然后调用setModelData()函数,设置模型数据,以及setEditorData()函数,更新编辑器
    • 视图最后发送closeEditor()信号函数,表示已关闭编辑器

    接下来,我们重写上面函数,来自定义一个QCostomizedDelegate委托类

    效果如下

     

    QCustomizedDelegate.h:

    QCustomizedDelegate.cpp:

    然后,再通过视图的setItemDelegate(QAbstractItemDelegate * delegate )成员函数设置我们自定义的委托类对象即可

    深入自定义委托类

    之前我们写的自定义委托,每次都需要双击某个数据项,才能弹出编辑器

    那如何让委托一直呈现在视图显示上呢?

    步骤如下:

    • 重写委托类的paint成员函数
    • 在paint()中,通过QApplication::style()->drawControl()来自定义数据显示方式,比如绘制按钮
    • 重写委托类的editorEvent成员函数
    • 在editorEvent中处理交互事件,比如判断鼠标是否双击,以及更改模型数据等

    其中QApplication::style()->drawControl()函数参数如下所示:

    示例-自定义一个QCostomizedDelegate委托类

    效果如下

     

    代码如下

    QCustomizedDelegate.h:

    QCustomizedDelegate.cpp:


    文章来源:https://www.cnblogs.com/lifexy/p/9186565.html

  • 相关阅读:
    PHP加速器
    sublime text3-代码片段配置
    CI源码引用使用--php引用demo,静态变量和引用关系
    配置nginx1.7.8支持pathinfo模式
    php多线程即时通讯
    linux上配置subversion服务器端安装配置并使用svn,windows本地检出,设置同步更新服务器的钩子
    time返回当前的 Unix 时间戳而$_SERVER["REQUEST_TIME"]得到请求开始时的时间戳
    yum命令学习
    linux自定义开机启动服务
    闲与忙
  • 原文地址:https://www.cnblogs.com/xiongjim/p/9674163.html
Copyright © 2011-2022 走看看