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

wordpress 输出sql福建键seo排名

wordpress 输出sql,福建键seo排名,项目建设流程,成都哪里有做网站的文章目录 Qt 模型视图(四):代理类QAbstractItemDelegate1.基本概念1.1.使用现有代理1.2.一个简单的代理 2.提供编辑器3.向模型提交数据4.更新编辑器的几何图形5.编辑提示 Qt 模型视图(四):代理类QAbstractItemDelegate ​ 模型/视图结构是一种将数据存储和界面展示分离的编程方…

文章目录

  • Qt 模型视图(四):代理类`QAbstractItemDelegate`
    • 1.基本概念
      • 1.1.使用现有代理
      • 1.2.一个简单的代理
    • 2.提供编辑器
    • 3.向模型提交数据
    • 4.更新编辑器的几何图形
    • 5.编辑提示

Qt 模型视图(四):代理类QAbstractItemDelegate

模型/视图结构是一种将数据存储界面展示分离的编程方法。模型存储数据,视图组件显示模型中的数据,在视图组件里修改的数据会被自动保存到模型里。模型的数据来源可以是内存中的字符串列表或二维表格型数据,也可以是数据库中的数据表,一种模型可以用不同的视图组件来显示数据,所以模型/视图结构是一种高效、灵活的编程结构。

1.基本概念

与模型-视图-控制器模式不同,模型/视图设计不包括一个完全独立的组件来管理与用户的交互。通常,视图负责向用户呈现模型数据,并处理用户输入。为了使获得此输入的方式具有一定的灵活性,交互由代表执行。这些组件提供输入功能,还负责在某些视图中呈现单个项目。控制委托的标准接口在QAbstractItemDelegate类中定义。
委托应该能够通过实现paint()和sizeInt()函数来呈现自己的内容。但是简单的基于小部件的委托可以子类化QStyleItemDelegate替代QAbstractItemDelegate,并利用这些函数的默认实现。
代理的编辑器可以通过使用小部件来管理编辑过程或直接处理事件来实现。稍后将介绍第一种方法。

1.1.使用现有代理

Qt提供的标准视图使用QStyleItemDelegate的实例来提供编辑功能。委托接口的此默认实现以每个标准视图的常用样式呈现项目:QListView、QTableView和QTreeView
所有标准角色都由标准视图使用的默认委托处理。QStyledItemDelegate文档中描述了这些内容的解释方式。
视图使用的委托由itemDelegate()函数返回。setItemDelegate()函数允许您为标准视图安装自定义委托,在为自定义视图设置委托时必须使用此函数。

1.2.一个简单的代理

这里实现的委托使用QSpinBox提供编辑功能,主要用于显示整数的模型。尽管我们为此目的设置了一个基于整数的自定义表模型,但我们本可以很容易地使用QStandardItemModel,因为自定义委托控制着数据输入。我们构造了一个表视图来显示模型的内容,这将使用自定义委托进行编辑。
在这里插入图片描述
我们将委托从QStyleItemDelegate子类化,因为我们不想编写自定义显示函数。但是,我们仍然必须提供管理编辑器小部件的功能:

 class SpinBoxDelegate : public QStyledItemDelegate{Q_OBJECTpublic:SpinBoxDelegate(QObject *parent = nullptr);QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,const QModelIndex &index) const override;void setEditorData(QWidget *editor, const QModelIndex &index) const override;void setModelData(QWidget *editor, QAbstractItemModel *model,const QModelIndex &index) const override;void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option,const QModelIndex &index) const override;};SpinBoxDelegate::SpinBoxDelegate(QObject *parent): QStyledItemDelegate(parent){}

请注意,在构造委托时不会设置编辑器小部件。我们只在需要时构建编辑器小部件。

2.提供编辑器

在这个例子中,当表视图需要提供编辑器时,它会要求委托提供一个适合被修改项目的编辑器小部件。createEditor()函数提供了委托设置合适小部件所需的一切:

  QWidget *SpinBoxDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem &/* option */,const QModelIndex &/* index */) const{QSpinBox *editor = new QSpinBox(parent);editor->setFrame(false);editor->setMinimum(0);editor->setMaximum(100);return editor;}

请注意,我们不需要保留指向编辑器小部件的指针,因为视图负责在不再需要时销毁它。
我们在编辑器上安装代理的默认事件过滤器,以确保它提供用户期望的标准编辑快捷方式。可以在编辑器中添加其他快捷方式,以允许更复杂的行为;这些将在编辑提示一节中讨论。
该视图通过调用我们稍后为此目的定义的函数来确保编辑器的数据和几何图形设置正确。我们可以根据视图提供的模型索引创建不同的编辑器。例如,如果我们有一列整数和一列字符串,我们可以返回QSpinBox或QLineEdit,具体取决于正在编辑的列。
委托必须提供将模型数据复制到编辑器中的函数。在这个例子中,我们读取存储在显示角色中的数据,并相应地在旋转框中设置值。

 void SpinBoxDelegate::setEditorData(QWidget *editor,const QModelIndex &index) const{int value = index.model()->data(index, Qt::EditRole).toInt();QSpinBox *spinBox = static_cast<QSpinBox*>(editor);spinBox->setValue(value);}

在这个例子中,我们知道编辑器小部件是一个数字设定框。我们可以为模型中不同类型的数据提供不同的编辑器,在这种情况下,我们需要在访问其成员函数之前将小部件转换为适当的类型。

3.向模型提交数据

当用户在数字设定框中编辑完值后,视图会调用setModelData()函数要求委托将编辑后的值存储在模型中。

 void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,const QModelIndex &index) const{QSpinBox *spinBox = static_cast<QSpinBox*>(editor);spinBox->interpretText();int value = spinBox->value();model->setData(index, value, Qt::EditRole);}

由于视图管理代理的编辑器小部件,我们只需要用提供的编辑器的内容更新模型。在这种情况下,我们确保数字设定框是最新的,并使用指定的索引用它包含的值更新模型。
标准QStyledItemDelegate类通过发出closeEditor()信号通知视图何时完成编辑。该视图确保编辑器小部件已关闭并销毁。在这个例子中,我们只提供简单的编辑工具,所以我们永远不需要发出这个信号。
所有数据操作都是通过QAbstractItemModel提供的接口执行的。这使得委托在很大程度上独立于它所处理的数据类型,但为了使用某些类型的编辑器小部件,我们必须做出一些假设。在这个例子中,我们假设模型总是包含整数值,但我们仍然可以将此委托用于不同类型的模型,因为QVariant为意外数据提供了合理的默认值。

4.更新编辑器的几何图形

管理编辑器的几何图形是代理的责任。创建编辑器,更改项目在视图中的大小或位置时,必须设置几何图形。幸运的是,视图在视图选项对象中提供了所有必要的几何信息。

 void SpinBoxDelegate::updateEditorGeometry(QWidget *editor,const QStyleOptionViewItem &option,const QModelIndex &/* index */) const{editor->setGeometry(option.rect);}

在这各案例中,我们只使用条目矩形中的视图选项提供的几何信息。呈现具有多个元素的条目的委托不会直接使用条目矩形。它将使编辑器相对于项目中的其他元素进行定位。

5.编辑提示

编辑后,代理应向其他组件提供有关编辑过程结果的提示,并提供有助于任何后续编辑操作的提示。这是通过发出带有适当提示的closeEditor()信号来实现的。这是由构建spin box时安装的默认QStyledItemDelegate事件过滤器来处理的。
可以调整数字设定框的行为,使其更便于用户使用。在QStyledItemDelegate提供的默认事件过滤器中,如果用户点击Return确认他们在数字设定框中的选择,则代理将值提交给模型并关闭数字设定框。我们可以通过在数字设定框上安装自己的事件过滤器来改变这种行为,并提供适合我们需求的编辑提示;例如,我们可能会发出带有EditNextItem提示的closeEditor(),以自动开始编辑视图中的下一个项目。
另一种不需要使用事件过滤器的方法是提供我们自己的编辑器小部件,为了方便起见,可能会对QSpinBox进行子类化。这种替代方法将使我们能够以编写额外代码为代价,更好地控制编辑器小部件的行为。如果需要自定义标准Qt编辑器小部件的行为,通常在委托中安装事件过滤器会更容易。
委托不必发出这些提示,但那些没有发出提示的委托将较少地集成到应用程序中,并且将比那些发出提示以支持常见编辑操作的委托更难使用。

http://www.dt0577.cn/news/8586.html

相关文章:

  • 网站大屏轮播图效果怎么做什么是网络软文营销
  • 新手如何学会做网络销售领硕网站seo优化
  • 创建百度网站全球网站流量排名100
  • 给网站做选题windows优化大师下载
  • 延庆b2c网站制作价格网站关键词优化排名软件
  • 软件开发有前途吗搜索优化推广公司
  • 怎样做吧网站排名做上去站长统计软件
  • 成都网站建设报价宁波seo网络推广
  • 饮食类网站网络营销推广方案范文
  • wordpress音乐页面下载文件aso优化服务站
  • 网站建设 食品搜索引擎营销特点
  • c#网站开发案例源码搜狐综合小时报2022113011
  • 专做婚纱店设计网站营销策划思路及方案
  • 网站建设外包排名南宁百度首页优化
  • 做网站的流程百科免费站推广网站在线
  • 网络平台投诉电话seo检测
  • 资阳优化团队预订单页面seo搜索引擎优化
  • 金坛网站优化seo百度站长工具查询
  • 免费公司注册seo整站优化一年价格多少
  • 如何做盆栽蔬菜网站百度指数在哪里看
  • 关于网站建设电话销售的话术开网店3个月来亏了10万
  • 汽车网站建设的基本功能58同城网站推广
  • 徐州建站网站模板苏州seo网站优化软件
  • 移动网站 pc网站的区别百度百科入口
  • 做一个网站链接怎么做网站信息
  • 大岭山做网站网站收录登录入口
  • 用ps做网站的首页汽车品牌推广策划方案
  • 中咨建设监理有限公司网站google推广专员招聘
  • 简单班级网站模板微信引流主动被加软件
  • csdn 个人网站建设线上销售怎么做推广