Qt ModelViewDelegate(模型-视图-代理) 介绍和使用

news2024/11/19 16:28:48

一、Model (模型) 介绍

Qt Model 是 Qt 的一个重要组件,用于管理和展示数据。它是 Qt 的 Model/View 架构的核心部分,用于将数据模型与其视图相分离,实现数据的高效处理和可视化呈现。

Qt Model 可以理解成一组数据结构,其中包含了待展示的数据,以及有关这些数据的元数据信息,如列名、列类型、数据行数等。Qt Model 还提供了一系列接口,用于访问和操作这些数据,使得开发人员可以轻松地实现数据的增删改查等操作。

Qt Model 支持多种数据模型,包括基于内存、文件、数据库等不同类型的数据源,开发人员可以根据实际需求选择合适的数据模型。此外,Qt Model 也提供了多种视图组件,如 QListView、QTableView、QTreeView 等,用于将数据以不同的方式展示出来,同时也支持自定义视图组件。

lnterView 框架中所有模型都基于抽象基类  QAbstractltemModel 类,此类由:

  • QAbstractListModel
  • QAbstractProxyModel
  • QAbstractTableModel

类继承

二、View (视图) 介绍

Qt View 是一个跨平台的应用程序,用于在多个设备上查看 RTSP 和 HTTP 播放器。它使用Qt框架的嵌入式Web服务器和界面库,为用户提供了一个简单、易用的图形用户界面,支持实时视频流的播放、录像回放、抓拍等功能。Qt View 可以运行在多个操作系统,包括 Windows,Linux,Android 和 iOS 等。它广泛应用于监控系统、视频会议、视频门禁、家庭安防等领域。Qt View 被广泛应用于开源软件中,例如 ZoneMinder、iSpy、Bluecherry 和 Zoneminder-Moonlight。

InterView 框架中的所有视图都基于 抽象 基类 QAbstractltemView 类,此类由

  • QColumnView
  • QHeaderView
  • QListView
  • QTableView
  • QTreeView

类继承

三、Delegate (代理) 介绍

Qt Delegate是一种Qt框架中的重要组件,用于在数据模型和视图之间提供交互性。它可以用于自定义Qt控件的外观和行为,以满足特定的应用程序需求。

Qt Delegate通常用于实现以下功能:

  1. 为视图中的项目创建自定义外观,并定制数据的显示方式。

  2. 在编辑模式下,为单元格提供自定义编辑器以编辑数据。

  3. 实现特定的用户交互行为,如拖放、复制和粘贴等。

lnterView 框架中的所有代理都基于抽象基类  QAbstractltemDelegate 类
此类由

  • QltemDelegate 
  • QStyledltemDelegate

类继承

开发者可以继承这些类,实现自己的Delegate类,并提供自定义的视图和编辑器。Delegate类被应用程序中的QListView、QTableView、QTreeView等视图类调用,以实现数据模型的可视化展示和编辑。

四、Model-View-Delegate(模型-视图-代理) 实操

1.QT当中model-view-delegate(模型-视图-代理),此结构实现数据和界面的分离。

Qt的模型-视图结构分为三部分:模型(mode)-视图(view)-代理(Delegate) ,其中模型与数据源通信,

并为其它部件提供接口;

视图从模型中引用数据条的模型索引(Modellndex),在视图当中,代理负责绘制数据条目,比如编辑条目,代理和模型进行直接通信。

2、模型 (model): 实现自定义模型可以通过QAbstractltemModel类继承,也可以通过QAbstractListModel和QAbstractTableModel类继承实现列表模型或者表格模型


3、视图(view): 实现自定义的视图View,可以继承子QAbstractltemView类,对所需要的虚拟函数进行重定义


4.代理 (delegate) :在表格当中嵌入各种不同的控件,通过表格中控件对编辑的内容进行操作。表格插入控件方式,控件始终显示。

案例分析:实现下图功能

代码示例:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
};
#endif // MAINWINDOW_H

main.cpp

#include "mainwindow.h"

#include <QApplication>

#include <QAbstractItemModel>
#include <QAbstractItemView>
#include <QItemSelectionModel>

#include <QSplitter>
#include <QDirModel>
#include <QTreeView>
#include <QListView>
#include <QTableView>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    // 将下面两条语句注释操作
    // MainWindow w;
    // w.show();

    QDirModel model; // 专门用于获取磁盘文件目录的数据模型 类似QFileSystemModel类
    QTreeView tree; // 树形视图
    QListView list; // 列表视图
    QTableView table; // 表视图

    // 设置数据模型
    tree.setModel(&model);
    list.setModel(&model);
    table.setModel(&model);

    tree.setSelectionMode(QAbstractItemView::MultiSelection);
    list.setSelectionModel(tree.selectionModel());
    list.setSelectionModel(tree.selectionModel());


    QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)),&list,SLOT(setRootIndex(QModelIndex)));
    QObject::connect(&tree,SIGNAL(doubleClicked(QModelIndex)),&table,SLOT(setRootIndex(QModelIndex)));

    QSplitter *qsp=new QSplitter;
    qsp->addWidget(&tree);
    qsp->addWidget(&list);
    qsp->addWidget(&table);

    qsp->show();

    qsp->setWindowTitle("模型(Model)--测试操作");


    return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
}

MainWindow::~MainWindow()
{
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker容器技术实战1

1、docker容器 docker相当于传统的货运集装箱 虚拟机&#xff08;Virtual Machine&#xff0c;VM&#xff09;是一个完整的虚拟操作系统和硬件环境。它的工作原理是通过在一台物理主机上使用虚拟化软件来创建多个虚拟机实例&#xff0c;每个实例都可以运行独立的操作系统和应用…

01-初识HTML和CSS

1.HTML与CSS 1.1.什么是HTML&#xff1f;什么是CSS&#xff1f; HTML是HyperText Markup Language(超文本标记语言) ​ 它不是一种编程语言&#xff0c;而是一种标记语言&#xff0c;用于告诉浏览器如何构造你的页面。它可以由一系列HTML元素组合成web开发人员想要的简单或者…

扬帆起航:许战海方法论日文版正式发布

近日&#xff0c;中国头部战略咨询机构‘许战海咨询’最新研究成果《中国汽车行业新能源转型战略》行业白皮书日文版&#xff0c;即将在日本发布。同时发布的日文版核心方法论白皮书还有《主品牌进化战略》、《第二招牌增长战略》、《链主品牌&#xff1a;制造业的竞争之王》等…

Python特征分析重要性的常用方法

前言 特征重要性分析用于了解每个特征(变量或输入)对于做出预测的有用性或价值。目标是确定对模型输出影响最大的最重要的特征&#xff0c;它是机器学习中经常使用的一种方法。 为什么特征重要性分析很重要? 如果有一个包含数十个甚至数百个特征的数据集&#xff0c;每个特征…

C++中多态的原理【精华】

虚函数表 通过一道题我们先感受一下编译器针对多态的处理 #include <iostream> using namespace std;class Base { public:virtual void Func1(){cout << "Func1()" << endl;} private:int _b 1;char _c };int main() {cout << sizeof(B…

Nginx的请求处理流程

左端有WEB、EMAIL及TCP三种流量&#xff0c;而绿色方框里边使用非阻塞的事件驱动处理引擎进行接收这三种流量&#xff0c;所以需要状态机进行很好地识别处理。当状态机识别需要访问静态资源&#xff0c;那么就需要到硬盘里边获取&#xff1b;如果是反向代理的话&#xff0c;可以…

记录--怎么写一个可以鼠标控制旋转的div?

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 说在前面 鼠标控制元素旋转在现在也是一个很常见的功能&#xff0c;让我们从实现div元素的旋转控制开始来了解元素旋转的具体原理和实现方法吧。 效果展示 体验地址 code.juejin.cn/pen/7290719… 实现…

go-logger日志组件分割日志

功能 支持同时输出到 console, file, url命令行输出字体可带颜色文件输出支持根据 文件大小&#xff0c;文件行数&#xff0c;日期三种方式切分文件输出支持根据日志级别分别保存到不同的文件支持异步和同步两种方式写入支持 json 格式化输出代码设计易扩展&#xff0c;可根据…

C的魅力在于指针

原有的adrv9025 代理框架很好用,在其原有的平台上做改进

BAT030:按列表名单将路径a下的文件夹批量复制到路径b

引言&#xff1a;编写批处理程序&#xff0c;实现按列表名单将路径a下的文件夹批量复制到路径b。 一、新建Windows批处理文件 参考博客&#xff1a; CSDNhttps://mp.csdn.net/mp_blog/creation/editor/132137544 二、写入批处理代码 1.右键新建的批处理文件&#xff0c;点击…

Unity之ShaderGraph如何实现飘动的红旗

前言 今天我们来实现一个飘动的红旗 如图所示&#xff1a; 关键节点 SimpleNoise&#xff1a;根据输入UV生成简单噪声或Value噪声。生成的噪声的大小由输入Scale控制。 Split&#xff1a;将输入向量In拆分为四个Float输出R、G、B和A。这些输出向量由输入In的各个通道定义&…

同花顺动态Cookie反爬JS逆向分析

文章目录 1. 写在前面2. 请求分析3. Hook Cookie4. 补环境 1. 写在前面 最近有位朋友在大A失意&#xff0c;突发奇想自己闲来无事想要做一个小工具&#xff0c;监测一下市场行情的数据。自己再分析分析&#xff0c;虽是一名程序员但苦于对爬虫领域相关的技术不是特别熟悉。最后…

开源文档编辑器ONLYOFFICE最新版7.5发布

开源办公套件 ONLYOFFICE 文档最新版 7.5 现已发布&#xff1a;全新 PDF 编辑器、自动断字、分页符和跟踪箭头、屏幕朗读器等诸多新功能。 什么是 ONLYOFFICE 文档 ONLYOFFICE 文档是一款开源的办公套件,由总部位于拉脱维亚的Ascensio System SIA开发。它支持处理文本文档、电…

请解释一下 CSS3 的 Flexbox(弹性盒布局模型), 以及适用场景?

解析: CSS3的Flexbox&#xff08;弹性盒布局模型&#xff09;是一种强大的布局技术&#xff0c;用于创建灵活和响应式的布局。它解决了传统CSS布局模型在垂直和水平居中、等高列、自适应宽度等方面的一些挑战&#xff0c;使开发人员能够更轻松地构建各种复杂的布局。在下面的详…

【Java笔试强训】Day2(OR62 倒置字符串,排序子序列)

OR62 倒置字符串 链接&#xff1a;倒置字符串 题目&#xff1a; 将一句话的单词进行倒置&#xff0c;标点不倒置。比如 I like beijing. 经过函数后变为&#xff1a;beijing. like I 题目分析&#xff1a; 我们先有一个整体的思路&#xff0c;然后用代码去实现&#xff1…

【高等数学】导数与微分

文章目录 1、导数的概念1.1、引例1.1.1、变速直线运动瞬时速度1.1.2、曲线的切线 1.2、导数的定义1.3、证明常用导数1.4、导数的几何意义1.5、可导与连续的关系 2、函数的求导法则2.1、函数的和、差、积、商的求导法则2.2、反函数的求导法则2.3、复合函数的求导法则2.4、基本初…

Win系统VMware虚拟机安装配置(二)

系统的安装得分两个步骤&#xff0c;第一步得配置一台电脑&#xff0c;选配 cpu&#xff0c;内存&#xff0c;磁盘&#xff0c;网卡等硬 件。第二步才是安装系统。 一、配置电脑 1、 进入 VMware 双击 VMware 图标&#xff0c;看到如下界面。 2、 自定义新的虚拟机 3、…

网络协议--IP:网际协议

3.1 引言 IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输&#xff08;见图1-4&#xff09;。许多刚开始接触TCP/IP的人对IP提供不可靠、无连接的数据报传送服务感到很奇怪。 不可靠&#xff08;unreliable&#xff09;的意思是它不能…

苹果ipa文件签过名之后,不用分发可以直接下载安装到苹果手机上吗?安装原理与解决方案。

为什么我的苹果IPA文件不能安装到手机&#xff1f;我来说说&#xff0c;我们时常使用各种各样的应用程序来完成各类任务&#xff0c;获取信息和娱乐。但是&#xff0c;在众多的应用程序背后&#xff0c;有很多我们可能从未涉及的知识领域。其中&#xff0c;对于苹果设备上的ipa…

用 Java 在 PDF 中创建和管理图层,实现交互式文档

PDF 图层&#xff08;也称为可见图层或附加图层等&#xff09;是组织和管理 PDF 文档中内容可见性的一种方法。PDF 图层可用于创建交互式文档、隐藏或显示特定信息、创建多语言版本文档等。通过添加和删除图层&#xff0c;用户可以根据需要定制 PDF 文档指定内容的可见性与显示…