界面开发框架Qt新手入门教程:颜色编辑器示例

翻译|使用教程|编辑:龚雪|2023-03-31 10:39:24.640|阅读 63 次

概述:Qt提供了许多功能,可以以不同的方式显示预先和用户定义的项模型。本文将为大家介绍Qt框架中的一些项目视图示例,欢迎下载相关组件体验~

#助力企业成功·知名软控件产品销售,立即咨询>>

Qt 是目前最先进、最完整的跨平台C++开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。

界面开发框架Qt新手入门教程:项目视图示例介绍

Qt提供了许多功能,可以以不同的方式显示预先和用户定义的项模型,模型/视图体系结构引入的功能分离为开发人员定制项的表示提供了更大的灵活性。

Qt技术交流群:166830288      欢迎一起进群讨论

颜色编辑器示例

本示例演示如何创建QItemDelegate可以使用的编辑器。

界面开发框架Qt新手入门教程:颜色编辑器示例

QListViewQTableViewQTreeView中编辑数据时,编辑器由委托创建和显示。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通过名称知道一些预定义的颜色,只需循环遍历这些元素,用项填充编辑器。

Qt Widget组件推荐
  • QtitanRibbon - Ribbon UI组件:是一款遵循Microsoft Ribbon UI Paradigm for Qt技术的Ribbon UI组件,QtitanRibbon致力于为Windows、Linux和Mac OS X提供功能完整的Ribbon组件。
  • QtitanChart - Qt类图表组件:是一个C ++库,代表一组控件,这些控件使您可以快速地为应用程序提供漂亮而丰富的图表。
  • QtitanDataGrid - Qt网格组件:提供了一套完整的标准 QTableView 函数和传统组件无法实现的独特功能。使您能够将不同来源的各类数据加载到一个快速、灵活且功能强大的可编辑网格中,支持排序、分组、报告、创建带状列、拖放按钮和许多其他方便的功能。
  • QtitanDocking:允许您像 Visual Studio 一样为您的伟大应用程序配备可停靠面板和可停靠工具栏。黑色、白色、蓝色调色板完全支持 Visual Studio 2019 主题!

更多Qt产品教程、下载、正版授权资讯,请点击获取


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:慧都网

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问

在线咨询
联系我们

客服热线
023-68661681

QQ客服

意见反馈


添加微信获专业服务

TOP
在线客服系统
live chat