翻译|使用教程|编辑:龚雪|2023-03-31 10:39:24.640|阅读 45 次
概述:Qt提供了许多功能,可以以不同的方式显示预先和用户定义的项模型。本文将为大家介绍Qt框架中的一些项目视图示例,欢迎下载相关组件体验~
# 31款JAVA开发必备控件和工具 # 界面/文档管理/报表/IDE等4000款产品火热销售中 >>
Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。
Qt提供了许多功能,可以以不同的方式显示预先和用户定义的项模型,模型/视图体系结构引入的功能分离为开发人员定制项的表示提供了更大的灵活性。
Qt技术交流群:166830288 欢迎一起进群讨论
本示例演示如何创建QItemDelegate可以使用的编辑器。
在QListView、QTableView或QTreeView中编辑数据时,编辑器由委托创建和显示。QItemDelegate是Qt的项目视图使用的默认委托,它使用QItemEditorFactory为它创建编辑器,QItemEditorFactory提供的唯一实例默认安装在所有项目委托上。
项目编辑器包含QItemEditorCreatorBase实例的集合,这些实例为特定的QVariant数据类型生成编辑器(Qt中的所有模型都将数据存储在QVariant中),编辑器可以是任何Qt或自定义小部件。
在本例中,我们将创建一个编辑器(在ColorListEditor类中实现),它可以编辑QColor数据类型并由qitemdelegate使用。为此,我们创建了一个新的QItemEditorCreatorBase,该QItemEditorCreatorBase生成colorlisteditor并将其注册到一个新工厂,我们将其设置为默认的编辑器项工厂(唯一的工厂实例)。为了测试编辑器,我们实现了Window类,它显示一个QTableWidget,可以在其中编辑QColors。
窗口类实现
在窗口类中,为颜色编辑器创建项目编辑器基础,并将其添加到默认工厂。同时还添加了一个QTableWidget,可以在其中测试编辑器,它填充了一些数据并显示在窗口中。
仔细看看构造函数:
Window::Window() { QItemEditorFactory *factory = new QItemEditorFactory; QItemEditorCreatorBase *colorListCreator = new QStandardItemEditorCreator<ColorListEditor>(); factory->registerEditor(QMetaType::QColor, colorListCreator); QItemEditorFactory::setDefaultFactory(factory); createGUI(); }
QStandardItemEditorCreator是一个继承了QItemEditorCreatorBase的方便类,它的构造函数接受一个模板类,其实例从createWidget()返回。创建者使用一个构造函数,该构造函数将QWidget作为惟一参数;模板类必须提供这一点,这样,就不需要创建QStandardItemEditorCreator的子类。
在设置了新工厂之后,所有标准项目委托都将使用它(也就是,在设置新的默认工厂之前创建的委托)。
createGUI()函数设置表并用数据填充它。
ColorListEditor定义
ColorListEditor继承了QComboBox,并让用户从弹出列表中选择一个QColor。
class ColorListEditor : public QComboBox { Q_OBJECT Q_PROPERTY(QColor color READ color WRITE setColor USER true) public: ColorListEditor(QWidget *widget = nullptr); public: QColor color() const; void setColor(const QColor &color); private: void populateList(); };
QItemDelegate 管理编辑器和模型之间的交互,它从模型中检索要编辑的数据,并将来自编辑器的数据存储在模型中。编辑器编辑的数据存储在编辑器的用户数据属性中,委托使用Qt的属性系统按名称访问它。我们使用Q_PROPERTY宏声明用户数据属性,属性被设置为具有user关键字的用户类型。
ColorListEditor实现
ColorListEditor的构造函数简单地调用populateList(),稍后我们将讨论它,接下来看color()函数:
QColor ColorListEditor::color() const { return qvariant_cast<QColor>(itemData(currentIndex(), Qt::DecorationRole)); }
我们返回在组合框中选择的数据,数据存储在Qt::DecorationRole中,然后颜色也显示在弹出列表中(如上图所示)。
void ColorListEditor::setColor(const QColor &color) { setCurrentIndex(findData(color, Qt::DecorationRole)); }
findData()函数搜索组合框中的项目,并返回Qt::Decoration角色中有颜色的项目索引。
void ColorListEditor::populateList() { const QStringList colorNames = QColor::colorNames(); for (int i = 0; i < colorNames.size(); ++i) { QColor color(colorNames[i]); insertItem(i, colorNames[i]); setItemData(i, color, Qt::DecorationRole); } }
Qt通过名称知道一些预定义的颜色,只需循环遍历这些元素,用项填充编辑器。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:慧都网在对装配体进行装配时,如何使用用SOLIDWORKS创建智能零部件,然后在插入到装配体中?一个模型示例告诉你。
本文将为大家介绍基于DevExpress的GridControl实现的一些界面处理功能,欢迎下载最新版组件体验!
本指南将向您展示如何通过 Spire.Doc for .NET 创建条码的方法。
专业全面 & 实现Qt技术的跨平台Ribbon UI组件
QtitanDataGrid一个独特的Qt开发框架产品,吸收了Delphi、C++以及其他语言的优点
QtitanChart性能优异的跨平台Qt类图表组件
Qt一个跨平台的C++图形用户界面应用程序开发框架。
QtitanDocking一个用于允许创建类似于Microsoft可停靠用户界面的Qt框架组件。
服务电话
重庆/ 023-68661681
华东/ 18183052121
华南/ 18100878085
华北/ 17382392642
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技有限公司 版权所有 Copyright 2003-2023 渝ICP备12000582号-13 渝公网安备
50010702500608号