QT------模型/视图

一、模型/视图结构概述

  • 基本原理
    • Qt 的模型/视图(Model/View)架构将数据的存储和显示分离,提高了代码的可维护性和复用性。
    • 模型(Model):负责存储和管理数据,提供数据的访问接口,如获取数据、插入数据、修改数据、删除数据等。
    • 视图(View):负责显示数据,不关心数据的存储和操作,只根据模型的数据进行显示。
    • 代理(Delegate):负责在视图中渲染和编辑数据项,提供了一种机制来定制数据的显示和编辑方式,例如使用自定义的部件进行数据的编辑。

二、QAbstractItemModel 类

  • 功能
    • 是所有项模型的抽象基类,定义了项模型必须实现的接口,如 rowCountcolumnCountdatasetData 等,用于提供数据的存储和操作接口。
    • 可以自定义继承自 QAbstractItemModel 的模型类,以满足不同的数据存储和操作需求。

三、QAbstractItemView 类

  • 功能
    • 是所有项视图的抽象基类,提供了显示数据的通用接口,如 setModel 用于关联一个模型,视图会根据模型的数据进行显示和更新。
    • 常见的派生类有 QListViewQTreeViewQTableView 等,分别用于列表、树状、表格形式的数据显示。

四、QStringListModel 类及示例程序功能实现

  • 功能
    • 存储一个字符串列表,方便地用于 QListViewQComboBox 等视图的数据显示。
#include <QApplication>
#include <QListView>
#include <QStringListModel>


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    QStringListModel *model = new QStringListModel;
    QStringList stringList;
    stringList << "Item 1" << "Item 2" << "Item 3";
    model->setStringList(stringList);


    QListView *listView = new QListView;
    listView->setModel(model);


    listView->show();


    return app.exec();
}
  • 代码解释
    1. 创建一个 QStringListModel 并添加一些字符串元素。
    2. 创建一个 QListView 并将 QStringListModel 设置为其模型,QListView 将显示字符串列表中的元素。

五、自定义代理

  • 自定义代理功能
    • 允许用户自定义数据在视图中的显示和编辑方式,例如使用自定义的部件进行数据的编辑,或者添加一些特定的显示效果。
      在这里插入图片描述

六、QStyledItemDelegate 类及设计自定义代理类

  • 功能
    • 提供了默认的数据项显示和编辑功能,可作为自定义代理的基类。
#include <QApplication>
#include <QListView>
#include <QStyledItemDelegate>
#include <QPainter>
#include <QStyleOptionViewItem>


class CustomDelegate : public QStyledItemDelegate
{
protected:
    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
    {
        QStyleOptionViewItem opt = option;
        initStyleOption(&opt, index);


        // 自定义绘制
        painter->save();
        painter->setPen(Qt::red);
        painter->drawText(opt.rect, Qt::AlignCenter, index.data().toString());
        painter->restore();
    }


    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
    {
        // 创建自定义编辑器
        QLineEdit *editor = new QLineEdit(parent);
        return editor;
    }


    void setEditorData(QWidget *editor, const QModelIndex &index) const override
    {
        QLineEdit *lineEdit = qobject_cast<QLineEdit*>(editor);
        if (lineEdit) {
            lineEdit->setText(index.data().toString());
        }
    }


    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override
    {
        QLineEdit *lineEdit = qobject_cast<QLineEdit*>(editor);
        if (lineEdit) {
            model->setData(index, lineEdit->text());
        }
    }


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


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    QStringListModel *model = new QStringListModel;
    QStringList stringList;
    stringList << "Item 1" << "Item 2" << "Item 3";
    model->setStringList(stringList);


    QListView *listView = new QListView;
    listView->setModel(model);


    CustomDelegate *delegate = new CustomDelegate;
    listView->setItemDelegate(delegate);


    listView->show();


    return app.exec();
}
  • 代码解释
    1. 自定义 CustomDelegate 类,继承自 QStyledItemDelegate
    2. paint 方法用于自定义数据项的绘制,这里将文本绘制为红色。
    3. createEditor 方法创建自定义的编辑部件(这里是 QLineEdit)。
    4. setEditorData 方法将模型数据设置到编辑器中。
    5. setModelData 方法将编辑器的数据更新到模型中。
    6. updateEditorGeometry 方法设置编辑器的位置和大小。

七、QFileSystemModel 和 QTreeView 类及示例程序功能实现

  • 功能
    • QFileSystemModel 提供了文件系统的数据模型,可以显示文件和目录。
    • QTreeView 可以用来显示 QFileSystemModel 提供的数据。
#include <QApplication>
#include <QTreeView>
#include <QFileSystemModel>


int main(int argc, char *argv[])
{
    QApplication app(argc, argv);


    QFileSystemModel *model = new QFileSystemModel;
    model->setRootPath(QDir::homePath());


    QTreeView *treeView = new QTreeView;
    treeView->setModel(model);
    treeView->setRootIndex(model->index(QDir::homePath()));


    treeView->show();


    return app.exec();
}
  • 代码解释
    1. 创建 QFileSystemModel 并设置根路径为用户的主目录。
    2. 创建 QTreeView 并将 QFileSystemModel 设置为其模型。
    3. QTreeView 的根索引设置为用户主目录,使其显示用户主目录下的文件和目录结构。
      在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/945788.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【YOLO 项目实战】(12)红外/可见光多模态目标检测

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO 项目实战】&#xff08;10&#xff09;YOLO8 环境配置与推理检测 【YOLO 项目实战】&#xff08;11&#xff09;YOLO8 数据集与模型训练 【YOLO 项目实战】&#xff08;12&#xff09;红外/可…

HTML——38.Span标签和字符实体

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>span标签和字符实体</title><style type"text/css">h1{text-align: center;}p{text-indent: 2em;}span{color: red;}</style></head><…

太速科技-688-基于 VM1302的双路100G光纤PCIe4.0X16加速计算卡

基于 VM1302的双路100G光纤PCIe4.0X16加速计算卡 一、产品概述 基于Xilinx芯片方案基础上研发的一款双口100 G FPGA光纤以太网PCI-Express v4.0 x16智能加速计算卡&#xff0c;该智能卡拥有高吞吐量、低延时的网络处理能力以及辅助CPU进行网络功能卸载的能力&#xff0c…

KMP 2024 年总结,Kotlin 崛起的一年

2024 Google I/O 上正式官宣了 KMP&#xff08;Kotlin Multiplatform&#xff09;项目&#xff0c;它是 Google Workspace 团队的一项长期「投资」项目&#xff0c;由 JetBrains 开发维护和开源的项目&#xff0c;简单来说&#xff0c;JetBrains 主导&#xff0c;Google Worksp…

企业数字化转型的构念及实现路径

引言 随着信息技术的飞速发展&#xff0c;数字化转型已成为企业持续竞争力的关键。企业数字化转型不仅仅是技术的更新换代&#xff0c;更是一场涉及组织结构、业务流程、企业文化等多方面的深刻变革。本文将探讨企业数字化转型的构念&#xff0c;并提出实现路径。 企业数字化转…

精密制造动力箱行业需要哪种多功能电表

一、在精密制造动力箱行业&#xff0c;多功能电表的选择需要考虑以下几个方面&#xff1a; 电力参数测量 多功能电表应能够测量单相或三相的电流、电压、有功功率、无功功率、视在功率、频率、功率因数等电力参数。这些参数对于监控和管理动力箱的运行状态至关重要。 电能计量…

《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS架构介绍

1.3 架构介绍 HarmonyOS整体遵从分层架构设计&#xff0c;从下向上依次为&#xff1a;内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 組件”逐级展开&#xff0c;在多设备部署场景下&#xff0c;支持根据实际需求裁剪某些非必要的组件。HarmonyOS…

电脑有杂音滋滋滋响怎么处理?电脑有杂音解决指南

在日常使用电脑的过程中&#xff0c;您是否曾遭遇过这样令人困扰的问题&#xff1a;无论是播放音乐、观看视频还是进行语音通话时&#xff0c;电脑总会时不时地发出“滋滋滋”的电脑有杂音&#xff0c;严重影响了听觉体验和工作效率。这种现象并非无解&#xff0c;本文将为您提…

html+css+js网页设计 美食 家美食1个页面

htmlcssjs网页设计 美食 家美食1个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#xf…

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>

题目&#xff1a; 解析&#xff1a; 决策树&#xff1a; 代码设计&#xff1a; 代码&#xff1a; 写法一&#xff1a;path为全局变量 private int ret,path,aim;public int findTargetSumWays(int[] nums, int target) {aim target;dfs(nums,0);return ret;}private void…

VisualStudio 2019 升级遇到的问题及解决

事件起因 今天计划想研究下.net core&#xff08;后面版本直接称为 .net &#xff09;,发现 .net sdk 5.0 最新版本安装不成功。解决之后&#xff0c;真是手欠&#xff0c;看着Visual Studio 2019 有更新了&#xff0c;就直接点击了&#xff0c;这时才发现问题大了。。。 安装…

Quartus In-System Sources and Probes Editor 的使用说明

文章目录 前言使用说明参考资料 前言 Quartus 提供了 In-System Sources and Probes Editor 调试工具&#xff0c;通过 JTAG 接口使用该工具可以驱动和采样内部节点的逻辑值。即通过 Sources 功能来驱动 FPGA 内部信号&#xff0c;通过 Probes 功能来探测内部节点的逻辑值。在…

mybatis 和 mybatisPlus 兼容性问题

项目采用的是 mybatis&#xff0c; 后续引入了 mybatisPlus&#xff0c;用 mybatisX 创建的四个类一直报错&#xff0c;提示找不到符号&#xff0c;意识到 mybatis 和 mybatisPlus 的兼容性问题&#xff0c;通过修改配置 两者的配置如下 #配置mybatis配置 mybatis:type-aliase…

「Mac畅玩鸿蒙与硬件50」UI互动应用篇27 - 水果掉落小游戏

本篇教程将带你实现一个水果掉落小游戏&#xff0c;掌握基本的动态交互逻辑和鸿蒙组件的使用&#xff0c;进一步了解事件处理与状态管理。 关键词 UI互动应用水果掉落状态管理动态交互游戏开发 一、功能说明 水果掉落小游戏包含以下交互功能&#xff1a; 随机生成水果&#…

C# OpenCV机器视觉:凸包检测

在一个看似平常却又暗藏玄机的午后&#xff0c;阿强正悠闲地坐在实验室里&#xff0c;翘着二郎腿&#xff0c;哼着小曲儿&#xff0c;美滋滋地品尝着手中那杯热气腾腾的咖啡&#xff0c;仿佛整个世界都与他无关。突然&#xff0c;实验室的门 “砰” 的一声被撞开&#xff0c;小…

UGUI 优化DrawCall操作记录(基于Unity2021.3.18)

UGUI中相同材质相同Shader相同贴图的UI元素可以合并DrawCall。 1.使用图集 Unity性能优化---使用SpriteAtlas创建图集进行批次优化_unity2021.3.33 spriteatlas优化-CSDN博客 2.Canvas的子物体在场景树中的索引位置和不同图集不影响UI合批且UI网格没有重叠&#xff0c;如下图…

3---杭州工作三年半

2021-07-06来杭——2025-01-01元旦 1滨江2021-07-06——2022-11-25&#xff08;一年零四个月&#xff09; 2下沙2023-01-01——2023-04-27&#xff08;五个月&#xff09; 3苏州2023-06-07——2023-06-27&#xff08;一个月&#xff09;厦门2023-06-29——2023-07-06&#xff…

【项目开发】C#环境配置及VScode运行C#教程(学生管理系统)

原创文章,禁止转载。 文章目录 下载.NETVScode配置运行程序下载.NET 官网链接: https://dotnet.microsoft.com/en-us/download选择任意版本下载: 下载完成后,双击运行exe文件,等待安装完成。 在控制台输入: dotnet --version若出现版本信息,说明安装成功: VScode配…

Excel文件恢复教程:快速找回丢失数据!

Excel文件恢复位置在哪里&#xff1f; Excel是微软开发的电子表格软件&#xff0c;它为处理数据和组织工作提供了便捷。虽然数据丢失的问题在数字时代已经司空见惯&#xff0c;但对于某些用户来说&#xff0c;恢复未保存/删除/丢失的Excel文件可能会很困难&#xff0c;更不用说…

亚矩阵云手机技术形态与应用方向

亚矩阵云手机技术架构 亚矩阵云手机技术架构深度融合了云计算、虚拟化、边缘计算和大数据等先进技术&#xff0c;构建了一个全面且高效的移动终端服务体系。其中&#xff0c;云端服务器作为整个云手机的基石&#xff0c;采用高性能、高可用性的云计算资源&#xff0c;负责提供海…