当前位置: 首页 > news >正文

装修网站设计平台深圳市腾讯计算机系统有限公司

装修网站设计平台,深圳市腾讯计算机系统有限公司,安邦消防安全技术服务有限公司,渠道推广一、为什么需要委托 模型#xff08;model#xff09;用来数据存储#xff0c;视图#xff08;view#xff09;用来展示数据。因此#xff0c;模型/视图架构是一种将数据存储和界面展示分离的编程方法。具体如下图所示#xff1a; 由图可知#xff0c;模型向视图提供数…一、为什么需要委托 模型model用来数据存储视图view用来展示数据。因此模型/视图架构是一种将数据存储和界面展示分离的编程方法。具体如下图所示 由图可知模型向视图提供数据是单向的一般仅用于显示数据。当我们需要在视图上编辑数据时就需要用到委托delegate来提供一个临时的编辑器。这个编辑器既能获取模型的数据又能在接受用户编辑的数据后提交给模型。 注delegate有的书上直接翻译为代理。个人认为这个翻译不太准确因为在Qt中代理Proxy和委托Delegate是两个不同的概念。Proxy用于数据模型和视图之间的一些中介操作包括对数据进行过滤、排序和转换。而Delegate则用于自定义视图项的显示和编辑行为主要用于定制单元格的外观和编辑控件。 二、自定义委托 1.为什么自定义委托 如果我们没有提前进行任何设置在默认情况下委托提供的临时编辑器是QLineEdit编辑框。而我们知道QLineEdit不仅可以输入文字还能输入数组字母符号等任何数据。但是更多情况下我们希望根据数据类型使用不同的编辑器。 2.如何自定义委托 QStyledItemDelegate是视图组件使用的默认委托类。因此在创建好自定义委托类后必须首先将自定义的委托类实现QStyledItemDelegate中定义的4个虚函数右键选择重构可自动生成。而这4个虚函数是模型/视图系统自动调用的。 1creareEditor() 这个函数用来创建编辑模型数据的界面组件称为代理编辑器。函数定义如下 QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem option, const QModelIndex index) const; parent创建组件的父组件一般就是窗口对象。option一些显示选项包含字体、对齐方式、背景色等。index模型索引用来获取模型数据。 函数实现如下 QWidget *TSpinBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem option, const QModelIndex index) const {QSpinBox *editor new QSpinBox(parent); editor-setFrame(false); editor-setMinimum(0);editor-setMaximum(50000);return editor; } 注这里并没有返回QWidget类型而是返回了它的派生类QSpinBox类型。因此后面要注意类型转换。 2setEditorData() 这个函数会从数据模型获取数据然后显示到代理组件中。函数定义如下 void setEditorData(QWidget *editor, const QModelIndex index) const; editor前面函数 creareEditor() 返回的代理编辑器index用 index.model() 可以从数据模型获取数据 函数实现如下 void TSpinBoxDelegate::setEditorData(QWidget *editor, const QModelIndex index) const {int value index.model()-data(index, Qt::EditRole).toInt(); QSpinBox *spinBox static_castQSpinBox*(editor); // 类型转换spinBox-setValue(value); } 3setModelData() 这个函数会将代理组件的数据保存到数据模型中。函数定义如下 void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex index) const; model需要保存数据的数据模型 函数实现如下 void TSpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex index) const {QSpinBox *spinBox static_castQSpinBox*(editor); //强制类型转换int value spinBox-value(); //获取spinBox的值model-setData(index, value, Qt::EditRole); //更新到数据模型 } 4 updateEditorGeometry() 这个函数用来更新代理编辑组件的大小一般写法比较固定。函数实现如下 void TFloatSpinDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem option, const QModelIndex index) const {editor-setGeometry(option.rect); // 设置代理编辑器大小为建议大小 } 写到这里委托类就设置完了。接下来我们还需要在mainwindow.cpp中的构造函数初始化列表添加如下代码完成对相关组件的委托。 TSpinBoxDelegate intSpinDelegate new TSpinBoxDelegate(this); ui-tableView-setItemDelegateForColumn(0, intSpinDelegate); 这时当我们修改某项数据时就会自动产生一个QSpinBox的组件编辑器而不是默认的QLineEdit。
http://www.pierceye.com/news/928853/

相关文章:

  • 电商设计素材网站推荐然后建设自营网站
  • 网站方案设计网页兼容性 网站开发
  • 做网站怎么申请域名游戏软件开发需要学什么
  • 做外贸网站需要什么卡创app开发 杭州app开发公司
  • 哪个网站可以做视频外链怎样退订3d卫星街景会员费用
  • 烟台做网站建设电话设置网站默认编码
  • seo官网制作规划绍兴seo整站优化
  • 怎么做网站广告设计学习
  • 邵东平台网站建设中山手机台app
  • 学什么可以做网站免费qq空间网站
  • 网站套餐到期啥意思电子商务电商网站饿建设
  • 电商网站零售客户重庆旅游景点
  • 建设银行成都官网招聘网站自主建网站
  • 云南省建设厅定额网站房地产开发公司是做什么的
  • 哪个网站卖自己做的手工艺品有哪些好的做网站公司好
  • 做电影网站用什么主机好最新网站域名
  • 唐山做网站公司汉狮价格搜索引擎禁止的方式优化网站
  • 做视频网站视频常见网站安全漏洞
  • 苏州企业名录黄页新乡网站自然优化
  • 有哪些建设网站公司网站建设需求单
  • 招聘网站做销售用手机网站做app
  • 做一个网站 多少钱撤销网站备案
  • 建设网站的流程图企业工资管理系统软件
  • 个人网站空间大小可以做网站的语言
  • 网站设计需要哪些技术wap购物网站源码
  • 一个空间两个php网站新能源车排名前十名
  • 如何建设公司门户网站建站仅向商家提供技术服务
  • 全国城建中心官方网站广州市品牌网站建设怎么样
  • 做百度移动端网站排名软件有哪些漫画做的好的网站好
  • 网站建设的基本条件crm和erp的区别