当前位置: 首页 > news >正文

高端建设网站建设/seo网络优化教程

高端建设网站建设,seo网络优化教程,手机网页制作与网站建设,高端网站建设策划目录 引言 一、MVC思想介绍 1.1 MCV模型概述 1.2 Excel的处理数据 1.3 MVC模式的优势 二、QT中的MVC 1.1 模型(Model) 1. QAbstractItemModel 2. QStringListModel 3. QStandardItemModel 4. QSqlTableModel 和 QSqlQueryModel 5. QAbstract…

目录

引言

一、MVC思想介绍

1.1 MCV模型概述

1.2 Excel的处理数据

1.3 MVC模式的优势

二、QT中的MVC

1.1 模型(Model)

1. QAbstractItemModel

2. QStringListModel

3. QStandardItemModel

4. QSqlTableModel 和 QSqlQueryModel

5. QAbstractListModel

6. QAbstractProxyModel

7. QStyledItemDelegate

1.2 视图(View)

1. QAbstractItemView

2. QListView

3. QTableView

4. QTreeView

5. 视图类的使用

1.3 委托(Delegate)

1. QItemDelegate类

2. QStyledItemDelegate类

3. 比较

4. 委托类的使用

三、简单的实例

四、结论


引言

在现代软件开发中,MVC(Model-View-Controller)编程模式因其清晰的结构和高效的开发流程而广受青睐。MVC不仅促进了代码的组织和复用,还提高了应用程序的可扩展性和可维护性。本文将深入探讨MVC模式的思想、原理、组成部分、QT中的MVC以及实现简单示例。

一、MVC思想介绍

1.1 MCV模型概述

MVC是一种将应用程序分为三个核心部分的软件设计模式:模型(Model)、视图(View)和控制器(Controller)。这三个部分各自负责不同的职责,通过明确的接口相互通信,共同协作完成应用程序的功能。

  • 模型(Model):负责应用程序的数据和业务逻辑。它代表数据和业务规则,是应用程序的核心。模型接收输入数据,处理业务逻辑,然后返回处理结果。模型与数据库交互,封装了数据的访问逻辑。

  • 视图(View):负责数据的展示和用户界面的渲染。视图从模型接收数据,并将其以用户友好的方式呈现给用户。视图不处理业务逻辑,只是展示数据。

  • 控制器(Controller):作为模型和视图之间的桥梁,处理用户的输入,并调用模型和视图去完成用户的请求。控制器接收用户的输入(如点击按钮、提交表单等),决定使用哪个模型来处理请求,并选择合适的视图来展示结果。

1.2 Excel的处理数据

通过一个简单的例子来理解什么是MVC架构的思想。

以上是一个Excel表格有学生的成绩,在Excel应用中绘制其树状图和折线图。

当修改Excel表格中的数据,树状图和折线图也会随之更改。

简单来说:

模型(Model):就是Excel表格的数据存储;

视图(View):就是树状图和折线图的视图界面;

控制器(Controller):就是处理输入,并更新模型和视图。

1.3 MVC模式的优势

  1. 高内聚低耦合:MVC模式通过将应用程序的不同部分分离,降低了它们之间的耦合度,提高了模块的内聚性,使得修改和扩展变得更加容易。

  2. 易于维护:由于MVC模式将应用程序的不同职责分配给不同的组件,因此当需要修改应用程序时,可以更容易地定位到需要修改的部分,而不会影响到其他部分。

  3. 可重用性:模型和控制器可以被多个视图重用,提高了代码的重用性。

  4. 清晰的分工:MVC模式明确了开发人员之间的分工,提高了开发效率。

二、QT中的MVC

在QT中的 控制器 Controller改了个单词 委托 Delegate,就只是简单改了个单词,性质的一样的。

1.1 模型(Model)

在Qt中,MVC(Model-View-Controller)架构的Model部分负责管理和存储数据,以及提供数据访问的接口。Qt框架提供了一系列的Model类来支持这种架构,这些类通常继承自QAbstractItemModel或它的子类。以下是一些关键的Qt Model类及其特点:

1. QAbstractItemModel
  • 概述:这是所有模型类的基类,定义了模型必须实现的基本接口。由于它是一个抽象类,通常不直接使用,而是使用它的子类。
  • 功能:提供了模型与视图之间进行数据交互的接口,如index()parent()rowCount()columnCount()等方法。
2. QStringListModel
  • 概述:这是一个简单的模型类,用于存储和提供QString列表给视图。
  • 特点:适用于需要在视图小部件(如QListViewQComboBox)中显示许多字符串的简单情况。
  • 使用场景:当应用程序需要从列表中显示一组字符串时,可以使用QStringListModel
3. QStandardItemModel
  • 概述:这是一个更通用的模型类,提供了用于存储和管理项目数据的标准方式。
  • 特点:支持多维数据(行和列),可以包含不同类型的项(如文本、图标等)。
  • 使用场景:适用于需要表格、列表或树形结构显示数据的复杂情况。
4. QSqlTableModel 和 QSqlQueryModel
  • 概述:这两个类专门用于与数据库交互,将SQL查询的结果集作为模型数据。
  • 特点
    • QSqlTableModel:自动处理多个SQL查询,但通常适用于具有简单表结构的情况。
    • QSqlQueryModel:允许执行自定义的SQL查询,并将结果集映射为模型数据。
  • 使用场景:当应用程序需要从数据库中检索数据并在视图中显示时,可以使用这些类。
5. QAbstractListModel
  • 概述:这是一个一维列表模型的基类,提供了处理一维数据列表的接口。
  • 特点:比QStringListModel更灵活,可以存储任何类型的数据项。
  • 使用场景:当需要自定义一维列表模型时,可以继承QAbstractListModel
6. QAbstractProxyModel
  • 概述:这是一个代理模型的基类,用于对原始模型的数据进行转换(如排序、过滤等)。
  • 子类:包括QSortFilterProxyModel(提供排序和过滤功能)和QIdentityProxyModel(不进行任何修改的代理)。
  • 使用场景:当需要对模型数据进行排序、过滤或其他转换时,可以使用代理模型。
7. QStyledItemDelegate
  • 概述:虽然QStyledItemDelegate不是直接的Model类,但它在MVC架构中扮演了重要角色,用于自定义视图中项的显示和编辑。
  • 特点:支持样式表,允许轻松地定制渲染。
  • 使用场景:当需要自定义视图中项的渲染方式时,可以继承QStyledItemDelegate

Qt中的MVC Model类提供了丰富的接口和类来支持数据的存储、管理和显示。通过继承和使用这些类,开发者可以轻松地实现复杂的用户界面和数据交互逻辑。在选择Model类时,应根据应用程序的具体需求和数据的特性来决定。

1.2 视图(View)

在Qt中,MVC(Model-View-Controller)架构的View类负责数据的可视化展示,即将模型(Model)中的数据以图形界面的形式呈现给用户。Qt提供了一系列现成的View类,这些类都基于QAbstractItemView抽象基类,用于实现不同的数据展示方式。以下是对Qt中MVC的View类的详细介绍:

1. QAbstractItemView
  • 作用QAbstractItemView是所有视图类的抽象基类,它定义了视图类所需的基本接口和功能。
  • 特点
    • 提供了视图的基本属性,如选择模式、滚动模式、拖拽支持等。
    • 允许子类通过重写虚函数来自定义视图的行为。

Qt提供了几种具体的View类,以满足不同的数据展示需求:

2. QListView
  • 作用:显示一个项目列表,每个项目占据一行。
  • 特点:支持单选、多选等选择模式,可以通过设置不同的模式来改变用户的选择行为。
3. QTableView
  • 作用:在表格中显示模型中的数据,每个数据项占据一个单元格。
  • 特点:支持行选择、列选择或单元格选择,可以自定义表头、列宽、行高等。
  • 功能:通过setAlternatingRowColors等函数可以设置表格的交替行颜色,提高可读性。
4. QTreeView
  • 作用:在分层列表中显示模型数据项,通常用于展示具有层级关系的数据。
  • 特点:支持展开/折叠节点,可以根据需要显示或隐藏子项。
5. 视图类的使用
  • 设置模型:通过调用视图的setModel函数,将模型与视图关联起来。这样,视图就可以从模型中获取数据并进行展示了。
  • 自定义视图:如果需要自定义视图的展示方式,可以通过继承QAbstractItemView或现有的视图类,并重写相关函数来实现。
  • 处理用户交互:视图类提供了丰富的信号和槽机制,用于处理用户的交互操作,如选择项的改变、拖拽操作等。

Qt中的MVC架构中的View类提供了丰富的数据展示方式,通过继承QAbstractItemView或现有的视图类,并设置模型,可以轻松地实现数据的可视化展示。同时,视图类还提供了丰富的信号和槽机制,用于处理用户的交互操作。

1.3 委托(Delegate)

在Qt的MVC(Model-View-Controller)架构中,虽然Qt官方更偏向于使用Model-View架构(因为Qt没有直接实现一个完整的Controller层,但你可以通过其他方式如信号和槽机制来模拟Controller的行为),Delegate类是一个非常重要的组成部分,它允许你自定义视图(View)中数据的显示和编辑方式。

QStyledItemDelegate类和QItemDelegate类都是Qt框架中用于自定义和控制项视图控件(如QListView、QTableView、QTreeView)中项的显示和编辑的委托类。它们提供了对项的外观和编辑行为的定制能力,但两者之间存在一些关键的区别。

1. QItemDelegate类
  • 功能:QItemDelegate是Qt中较早期的委托类,用于处理视图中项的显示和编辑。它继承自QAbstractItemDelegate,并提供了默认的绘制和编辑功能。
  • 绘制功能:QItemDelegate使用QStyle进行绘制,这意味着它的绘制风格是基于系统的默认风格。
  • 编辑功能:它提供了默认的编辑器(如文本框、复选框等)和编辑行为。
  • 自定义性:可以通过重写paint和createEditor等虚函数来自定义项的显示和编辑行为。
  • 使用场景:尽管在Qt 4.4之后引入了QStyledItemDelegate,但在一些需要兼容旧版本Qt或特定绘制风格的场景中,QItemDelegate仍然是一个可用的选择。
2. QStyledItemDelegate类
  • 功能:QStyledItemDelegate是Qt 4.4引入的,旨在替代QItemDelegate,提供更灵活和现代的项委托。它也是继承自QAbstractItemDelegate,并使用QStyle进行绘制。
  • 增强功能
    • 绘制机制:QStyledItemDelegate利用了QStyle的高级功能,可以更好地支持复杂的UI元素和现代风格。
    • 统一的风格:它能更好地与Qt的样式系统集成,确保在不同平台和风格下的外观一致性。
    • 简化的自定义:提供了一些额外的虚函数(如initStyleOption),使自定义项的显示和编辑更加简单和灵活。
  • 使用场景:QStyledItemDelegate是Qt推荐的用于自定义项视图控件中项的显示和编辑的委托类,特别是在需要现代和灵活的绘制风格时。
3. 比较
特性QItemDelegateQStyledItemDelegate
引入时间早期Qt 4.4
绘制机制使用QStyle进行绘制,基于系统默认风格利用QStyle的高级功能,支持更复杂和现代的UI元素
自定义性可以通过重写paint和createEditor等虚函数来自定义提供更多虚函数和工具函数,使自定义更加简便和灵活
使用场景兼容旧版本Qt或特定绘制风格现代和灵活的绘制风格需求

在选择使用QItemDelegate还是QStyledItemDelegate时,应根据项目需求、Qt版本兼容性以及所需的绘制风格等因素进行综合考虑。在大多数情况下,推荐使用QStyledItemDelegate,因为它提供了更强大和灵活的自定义能力,并且能更好地与Qt的样式系统集成。

4. 委托类的使用
  1. 创建Delegate类
    继承自QStyledItemDelegate(或QItemDelegate),然后重写paintcreateEditor(如果需要编辑)以及setEditorDatasetModelData等函数。

  2. 设置Delegate到View
    使用QAbstractItemView(如QTableViewQListView)的setItemDelegatesetItemDelegateForColumn/setItemDelegateForRow方法来将你的Delegate应用到整个视图或特定的列/行上。

三、简单的实例

在qt设计三个视图控件(ListView、TableView、TreeView)来显示本地系统文件结构,当本地系统文件发生改变,视图也随之改变

UI界面:

代码:

#include "widget.h"
#include "ui_widget.h"#include <QFileSystemModel>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QFileSystemModel *model = new QFileSystemModel(this);model->setRootPath(QDir::currentPath());ui->listView->setModel(model);ui->listView->setRootIndex(model->index(QDir::currentPath()));ui->treeView->setModel(model);ui->treeView->setRootIndex(model->index(QDir::currentPath()));ui->tableView->setModel(model);ui->tableView->setRootIndex(model->index(QDir::currentPath()));}Widget::~Widget()
{delete ui;
}

运行结果:

当在系统中添加一个测试文件test.txt视图也随之改变:

四、结论

Qt中的MVC架构通过将应用程序分成模型、视图和控制器三个组件,实现了高内聚、低耦合的设计。这种架构使得Qt应用程序更加模块化、灵活和易于维护。通过合理地使用MVC模式,开发者可以更好地组织和管理Qt应用程序的代码,提高开发效率和应用程序的质量。

相关文章:

MVC软件设计模式及QT的MVC架构

目录 引言 一、MVC思想介绍 1.1 MCV模型概述 1.2 Excel的处理数据 1.3 MVC模式的优势 二、QT中的MVC 1.1 模型&#xff08;Model&#xff09; 1. QAbstractItemModel 2. QStringListModel 3. QStandardItemModel 4. QSqlTableModel 和 QSqlQueryModel 5. QAbstract…...

使用WSL通过SSH连接并运行图形界面程序

使用WSL通过SSH连接并运行图形界面程序 1. 在Windows上安装X服务器2. 配置并启动VcXsrv3. 在WSL Ubuntu中设置DISPLAY变量4. 从WSL Ubuntu连接到远程服务器5. 在远程服务器上设置DISPLAY变量6. 测试X11转发7. 运行您的安装程序注意事项 在Windows Subsystem for Linux (WSL) 上…...

柳湛宇-简历

...

6-1 从全连接层到卷积

我们之前讨论的多层感知机十分适合处理表格数据&#xff0c;其中行对应样本&#xff0c;列对应特征。 对于表格数据&#xff0c;我们寻找的模式可能涉及特征之间的交互&#xff0c;但是我们不能预先假设任何与特征交互相关的先验结构。 此时&#xff0c;多层感知机可能是最好的…...

【Android Studio】项目目录结构

文章目录 常用视图Android视图project视图 gradlebuild.gradleSDK 路径主题入口程序 常用视图 Android视图 project视图 gradle build.gradle SDK 路径 主题 入口程序...

electron-builder打包vue2项目问题合集

一、打包之后不显示elecmentui的图标 1、使用版本 vue ^2.6.14element-ui ^2.15.14vue-cli-plugin-electron-builder 2.1.1 2、解决办法 1&#xff09; 如果是简单的图标可以使用图片代替&#xff08;这种对于elementui组件的图标还是不会显示&#xff09; 2&#xff09;在v…...

5行代码快速Git配置ssh

0 流程步骤 检查本地主机是否已经存在ssh key生成ssh key获取ssh key公钥内容&#xff08;id_rsa.pub&#xff09;复制该内容&#xff0c;到Github账号上添加公钥&#xff0c;进入Settings设置验证是否设置成功 1 代码 # 1.检查本地主机是否已经存在ssh key cd ~/.ssh ls # …...

气相色谱检测常见问题和实战案例分享-测试狗

气相色谱检测常见问题和实战案例分享 气相色谱GC是一种高效、灵敏的分离和分析技术&#xff0c;广泛应用于石油化工、环境保护、食品安全、药物分析等领域&#xff1b;在使用气相色谱进行检测时&#xff0c;可能会遇到一些常见问题&#xff0c;本文将分享一些实战案例&#xff…...

一文学会CUDA编程:深入了解CUDA编程与架构(一)

前言&#xff1a; CUDA&#xff08;Compute Unified Device Architecture&#xff0c;统一计算设备架构&#xff09;是由NVIDIA公司开发的一种并行计算平台和编程模型。CUDA于2006年发布&#xff0c;旨在通过图形处理器&#xff08;GPU&#xff09;解决复杂的计算问题。在早期…...

Jquery判断图片加载失败,显示默认图片

//加载图片 出现404状态时触发 $(img).error(function () { //将加载不到的图片的src属性时&#xff0c;修改成默认图片&#xff0c;注意&#xff1a;默认图片必须保证存在&#xff0c;否则会一直调用此函数&#xff0c;造成死循环。$(this).attr("src", "Imag…...

App 自动化测试调研

App 自动化测试调研 App 自动化测试的价值 App 自动化测试在软件开发过程中扮演着重要的角色&#xff0c;具有以下几个方面的价值&#xff1a; 1.提高测试效率和覆盖率&#xff1a;自动化测试可以执行大量的测试用例&#xff0c;覆盖各种功能和场景&#xff0c;相比手动测试…...

Java 后端已经过时的技术,也是我逝去的青春

最近这段时间收到了一些读者的私信&#xff0c;问我某个技术要不要学&#xff0c;还有一些的同学竟然对 Java 图形化很感兴趣&#xff0c;还想找这方面的工作。 我接触 Java 已近 10多年了&#xff0c;见证了许多 Java 技术变迁&#xff0c;包括&#xff1a; JavaEE 框架&…...

释放自动化测试潜能:性能优化策略与实战技巧!

引言 在当今追求软件快速迭代的环境下&#xff0c;自动化测试的性能瓶颈正成为制约开发流程加速的主要障碍。本文将深入探讨如何通过策略和实践&#xff0c;优化自动化测试的性能&#xff0c;实现测试执行速度的质的飞跃。 自动化性能瓶颈的识别与突破 首先&#xff0c;识别并…...

如何理解代码的跨平台?

跨平台性&#xff1a; 跨平台性意味着&#xff0c;在多个平台都兼容运行 那么是怎么做到跨平台&#xff1f; 一般来说&#xff0c;window的操作系统和Linux的操作系统肯定是不一样的 那么提供的系统调用接口和诸多细节也是不一样的 但是&#xff0c;我们的c语言和c语言&#xf…...

dp:221. 最大正方形

221. 最大正方形 看到这个题目真能立马想到dp吗&#xff1f;貌似很难&#xff0c;即使知道是一个dp题也很难想到解法。 直观来看&#xff0c;使用bfs以一个点为中点进行遍历&#xff0c;需要的时间复杂度为 O ( n 2 m 2 ) O(n^2m^2) O(n2m2) 但是可以很容易发现&#xff0c;…...

花10分钟写个漂亮的后端API接口模板!

你好&#xff0c;我是田哥 在这微服务架构盛行的黄金时段&#xff0c;加上越来越多的前后端分离&#xff0c;导致后端API接口规范变得越来越重要了。 比如&#xff1a;统一返回参数形式、统一返回码、统一异常处理、集成swagger等。 目的主要是规范后端项目代码&#xff0c;以及…...

评估分类机器学习模型的指标

欢迎来到雲闪世界。一旦我们训练了一个监督机器学习模型来解决分类问题&#xff0c;如果这就是我们工作的结束&#xff0c;我们会很高兴&#xff0c;我们可以直接向他们输入新数据。我们希望它能正确地对所有内容进行分类。然而&#xff0c;实际上&#xff0c;模型做出的预测并…...

农机自动化:现代农业的未来趋势

随着人口的增长和农业生产的需求不断增加&#xff0c;提高农业生产效率成为现代农业的重要目标。农机自动化作为一种新兴技术&#xff0c;可以大幅度提升农机的使用效率和生产能力。农机自动化是指利用先进的传感技术、数据处理和人工智能技术&#xff0c;使农机能够自动完成农…...

25考研操作系统复习·1.1/1.2/1.3 操作系统的基本概念/发展历程/运行环境

目录 操作系统的基本概念 概念&#xff08;定义&#xff09; 功能和目标 资源的管理者 向上层提供服务 给普通用户的 给软件/程序员的 对硬件机器的拓展 操作系统的特征 操作系统的发展历程 操作系统的运行环境 操作系统的运行机制 中断和异常 中断的作用 中断的…...

如何培养学生的创新意识和实践能力

培养学生的创新意识和实践能力是一个复杂而系统的过程&#xff0c;涉及多个方面的努力和措施。以下是一些具体的做法&#xff1a; 一、培养学生的创新意识 提供创新环境&#xff1a; 为学生创造一个开放、自由、支持创新的学习环境&#xff0c;让他们能够自由地表达自己的想法…...

四、GD32 MCU 常见外设介绍(15)CAN 模块介绍

CAN是控制器局域网络(Controller Area Network)的简称&#xff0c;它是由研发和生产汽车电子产品著称的德国BOSCH公司开发的&#xff0c;并最终成为国际标准&#xff08;ISO11519&#xff09;&#xff0c;是国际上应用最广泛的现场总线之一。 CAN总线协议已经成为汽车计算机控…...

AIGC大模型产品经理高频面试大揭秘‼️

近期有十几个学生在面试大模型产品经理&#xff08;薪资还可以&#xff0c;详情见下图&#xff09;&#xff0c;根据他们面试&#xff08;包括1-4面&#xff09;中出现高频大于3次的问题汇总如下&#xff0c;一共32道题目&#xff08;有答案&#xff09;。 29.讲讲T5和Bart的区…...

【嵌入式笔记】【C语言】struct union

结构体(Struct)定义: struct 结构体名 {member1; // 成员1,可以是任何基本数据类型或复合类型member2; // 成员2... };//例如: struct Point {float x;float y;...

【初学人工智能原理】【9】深度学习:神奇的DeepLearning

前言 本文教程均来自b站【小白也能听懂的人工智能原理】&#xff0c;感兴趣的可自行到b站观看。 代码及工具箱 本专栏的代码和工具函数已经上传到GitHub&#xff1a;1571859588/xiaobai_AI: 零基础入门人工智能 (github.com)&#xff0c;可以找到对应课程的代码 正文 深度…...

[RoarCTF 2019]Easy Calc1

打开题目 查看源码&#xff0c;看到 看到源代码有 calc.php&#xff0c;构造url打开 看到php审计代码&#xff0c; 由于页面中无法上传num&#xff0c;则输入 num&#xff0c;在num前加入一个空格可以让num变得可以上传&#xff0c;而且在进行代码解析时&#xff0c;php会把前…...

安卓APK安装包arm64-v8a、armeabi-v7a、x86、x86_64有何区别?如何选择?

在GitHub网站下载Android 安装包&#xff0c;Actions资源下的APK文件通常有以下版本供选择&#xff1a; 例如上图是某Android客户端的安装包文件&#xff0c;有以下几个版本可以选择&#xff1a; mobile-release.apk&#xff08;通用版本&#xff0c;体积最大&#xff09;mobi…...

【AI大模型】通义千问:开启语言模型新篇章与Function Call技术的应用探索

文章目录 前言一、大语言模型1.大模型介绍2.大模型的发展历程3.大模型的分类a.按内容分类b.按应用分类 二、通义千问1.通义千问模型介绍a.通义千问模型介绍b.应用场景c.模型概览 2.对话a.对话的两种方式通义千问API的使用 b.单轮对话Vue页面代码&#xff1a;Django接口代码 c.多…...

详细教程 MySQL 数据库 下载 安装 连接 环境配置 全面

数据库就是储存和管理数据的仓库&#xff0c;对数据进行增删改查操作&#xff0c;其本质是一个软件。 首先数据有两种&#xff0c;一种是关系型数据库&#xff0c;另一种是非关系型数据库。 关系型数据库是以表的形式来存储数据&#xff0c;表和表之间可以有很多复杂的关系&a…...

门控循环单元GRU

目录 一、GRU提出的背景&#xff1a;1.RNN存在的问题&#xff1a;2.GRU的思想&#xff1a; 二、更新门和重置门&#xff1a;三、GRU网络架构&#xff1a;1.更新门和重置门如何发挥作用&#xff1a;1.1候选隐藏状态H~t&#xff1a;1.2隐藏状态Ht&#xff1a; 2.GRU: 四、底层源码…...

程序员修炼之路

成为一名优秀的程序员&#xff0c;需要广泛而深入地学习多个领域的知识。这些课程不仅帮助建立扎实的编程基础&#xff0c;还培养了问题解决、算法设计、系统思维等多方面的能力。以下是一些核心的必修课&#xff1a; 计算机基础 计算机组成原理&#xff1a;理解计算机的硬件组…...