界面开发框架Qt新手入门教程 - 颜色编辑器示例 Qt是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写所有平台无差别运行更提供了几乎所有开发过程中需要用到的工具。如今Qt已被运用于超过70个行业、数千家企业支持数百万设备及应用。Qt提供了许多功能可以以不同的方式显示预先和用户定义的项模型模型/视图体系结构引入的功能分离为开发人员定制项的表示提供了更大的灵活性。颜色编辑器示例本示例演示如何创建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 QStandardItemEditorCreatorColorListEditor(); 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_castQColor(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通过名称知道一些预定义的颜色只需循环遍历这些元素用项填充编辑器。

相关新闻

最新新闻

Darkwallet隐私增强技巧:如何最大化你的比特币交易匿名性

Darkwallet隐私增强技巧:如何最大化你的比特币交易匿名性

Darkwallet隐私增强技巧:如何最大化你的比特币交易匿名性 【免费下载链接】darkwallet Your keys. Your privacy. Your sovereignty. 项目地址: https://gitcode.com/gh_mirrors/da/darkwallet Darkwallet是一款专注于隐私保护的比特币钱包,秉持&…

2026/8/15 18:58:14
如何使用Neat URL?5分钟快速上手教程

如何使用Neat URL?5分钟快速上手教程

如何使用Neat URL?5分钟快速上手教程 【免费下载链接】Neat-URL Neat URL cleans URLs, removing parameters such as Google Analytics utm parameters. 项目地址: https://gitcode.com/gh_mirrors/ne/Neat-URL Neat URL是一款强大的URL清理工具&#xff0…

2026/8/15 18:58:14
Lynx-Stack性能优化实战:10个提升应用响应速度的技巧

Lynx-Stack性能优化实战:10个提升应用响应速度的技巧

Lynx-Stack性能优化实战:10个提升应用响应速度的技巧 【免费下载链接】lynx-stack The frontend framework and toolchain of Lynx 项目地址: https://gitcode.com/gh_mirrors/ly/lynx-stack Lynx-Stack作为现代前端框架与工具链,其核心优势在于高…

2026/8/15 18:58:14
backoff完全入门:从安装到实战的简单教程

backoff完全入门:从安装到实战的简单教程

backoff完全入门:从安装到实战的简单教程 【免费下载链接】backoff Simple backoff algorithm in Go (golang) 项目地址: https://gitcode.com/gh_mirrors/backoff1/backoff backoff是一个用Go语言实现的简单指数退避算法库,它能帮助开发者轻松处…

2026/8/15 18:58:14
FastGAN-pytorch预训练模型使用教程:从Docker到本地部署的简单步骤

FastGAN-pytorch预训练模型使用教程:从Docker到本地部署的简单步骤

FastGAN-pytorch预训练模型使用教程:从Docker到本地部署的简单步骤 【免费下载链接】FastGAN-pytorch Official implementation of the paper "Towards Faster and Stabilized GAN Training for High-fidelity Few-shot Image Synthesis" in ICLR 2021 …

2026/8/15 18:58:14
Unity TMP_SDF 分析(九)UNITY_UI_CLIP_RECT 与 UNITY_UI_ALPHACLIP

Unity TMP_SDF 分析(九)UNITY_UI_CLIP_RECT 与 UNITY_UI_ALPHACLIP

Unity TMP_SDF 分析(九):UNITY_UI_CLIP_RECT 与 UNITY_UI_ALPHACLIP适用版本:Unity 2021.3.23f1c1|TextMeshPro 3.0.9|UGUI 1.0.0 分析范围:项目中的标准 Assets/TextMesh Pro/Shaders/TMP_SDF.…

2026/8/15 18:53:14