Qt学习系列之设计模式的小记录

news2024/10/12 13:49:19

Qt学习系列之设计模式的小记录

  • 前言
  • Qt中的设计模式
  • 使用情况
    • 数据模型
    • 视图组建
    • 代理
  • 小tips
    • 虚函数:
    • 基类的不同
    • 具体使用
      • 界面设计
      • 后台显示
    • 报错解决
  • 总结


前言

在软件设计师中的设计模式有提到设计模式有三种类型:

  • 创建型:工厂方法模式、抽象工厂、原型模式、单例模式、构建器模式
  • 结构型:适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式
  • 行为型:模板方法模式、解释器模式、职责链模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、访问者模式
    一共23种设计模式。
    而在Qt中也使用到一些常见的设计模式,今天来详细介绍一下!

Qt中的设计模式

  • 模型-视图-控制器(Model-View-Controller, MVC):用于实现用户界面的常用设计模式。在Qt中,MVC被用来分离数据(模型)、用户界面(视图)和用户输入处理(控制器)。这一类模型在WPF中也常见,后来被分化为MVVM模型。
  • 模型-视图-委托(Model-View-Delegate):MVC的一个变体,它在Qt的模型/视图架构中使用。它引入了“委托”来处理数据项的渲染和编辑。Model/View基本结构:模式是视图与原始数据之间的接口视图就是界面组建。
  • 观察者模式(Observer):定义对象之间的一对多依赖关系,当一个对象改变状态时,它的所有依赖者都会收到通知。Qt中的信号和槽机制就是观察者模式的实现。

使用情况

数据模型

需要了解 QAbstractltemModel 类,用于实现自定义数据模型的基类,可以用于任何类型的视图,包括列表(QListView)、树(QTreeView)、表格(QTableView)等。在它的基础上就衍生了其他很多类,衍生的类就根据特定数据进行的数据模型,而QAbstractltemModel 是处理各种类型的数据结构。

QAbstractltemModel在使用时必须子类化并实现index()\parent()\rowcount()\columncount()\data()

视图组建

需要了解QListView、QTreeView、QTableView这三类,这三类是便利类。当需要处理大数据时,需要使用QAbstractItemView。

代理

QAbstractltemDelegate 是所有代理类的基类,作为抽象类。

小tips

虚函数:

  • 声明:virtual。
  • 重定义:在派生类重定义(override)。
  • 调用:通过基类的指针或引用调用时,会根据对象的实际类型来决定调用哪个版本的函数。
class Base {
public:
    virtual void show() {
        std::cout << "Base show" << std::endl;
    }
    virtual ~Base() {} // 虚析构函数,确保派生类对象的正确释放
};

class AA : public Base {
public:
    void show() override {  // 使用override关键字明确表示重定义
        std::cout << "AA show" << std::endl;
    }
};

这里就是基于base来派生了AA,在AA中使用override来重新定义了show().

基类的不同

  • QWidget:Qt 中所有用户界面对象的基类,基本的窗口功能、非主窗口部分的用户界面。
  • QMainWindow:主窗口框架的基类。
  • QDialog:创建对话框的基类。
    在创建Qt项目时,根据自己的需求进行基类的选择!

具体使用

通过读取数据库中的数据进行案例演示:

界面设计

在这里插入图片描述
界面上选择QTableView,可以用于使用数据库数据显示。

后台显示

tableModel=new QSqlQueryModel(this);//定义一个数据库的数据模型。并指定父对象
QSqlDatabase my_db=QSqlDatabase::addDatabase("QSQLITE");
my_db.setDatabaseName("XXX\\DataInfos.db");
if(!my_db.open())
{
    qDebug()<<"打开失败";
    return;
}
QString sql="select * from DataInfo_tab";
tableModel->setQuery(sql);
ui->tableView->setModel(tableModel);
  • tableModel->setQuery(sql); 执行查询。设置模型到视图:通过 ui->tableView->setModel(tableModel); 将模型关联到 QTableView 控件
  • 模型(Model):QSqlQueryModel 是模型,它从数据库查询数据并管理这些数据。QSqlQueryModel 继承自QAbstractTableModel,是 Qt SQL模块提供的一个方便的模型,用于将 SQL 查询结果直接显示在视图中。
  • 视图(View):QTableView 是视图,它显示模型提供的数据。QTableView 可以展示来自 QSqlQueryModel的数据,并且能够通过模型/视图架构与数据进行交互。

报错解决

  • QSqlDatabase::QSqlDatabase(const QString&)’ is protected。
    这个能直接用QSqlDatabase来连接数据库,可以把QSqlDatabase db = QSqlDatabase("QDRIVER");改为QSqlDatabase db = QSqlDatabase::addDatabase("QDRIVER");

  • Qt连接成功数据库,库中有表,表中有数,但是没有读出来。
    路径问题!!my_db.setDatabaseName("SQL\DataInfos.db");改成这个
    my_db.setDatabaseName("SQL\\DataInfos.db");。其实就是一个符号的问题!


总结

简单记录一下Qt的Model/View设计模式的使用!

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

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

相关文章

上海AI实验室CVT-Occ时间融合利用视差搜索刷新occ3DWaymo SOTA

上海AI实验室提出CVT-Occ&#xff1a;通过时间融合利用视差搜索刷新occ3D-Waymo SOTA Abstract 基于视觉的3D占据预测由于单目视觉在深度估计上的固有局限性而面临显著挑战。本文介绍了CVT-Occ&#xff0c;一种新颖的方法&#xff0c;通过时间上的体素几何对应进行时间融合&a…

华为OD机试 - 最快到达医院的方法(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

欧洲气象局开源数据如何通过大模型预测未来天气

气象预测依赖于全球各地的观测数据、复杂的数学模型和高性能计算资源。欧洲气象局&#xff08;ECMWF&#xff0c;European Centre for Medium-Range Weather Forecasts&#xff09;作为世界领先的气象预报机构&#xff0c;不仅提供精确的天气预报服务&#xff0c;还向公众和科研…

获取鸿蒙设备Udid遇到的问题

参考官方文档&#xff1a;注册调试设备-调试应用&#xff08;HarmonyOS&#xff09;-AppGallery Connect帮助中心 - 华为HarmonyOS开发者 (huawei.com) 坑一&#xff1a;The sdk hdc.exe version is too low, please upgrade to the latest version. 升级dev工具和sdk配置为api…

google域名邮箱:如何创建并管理邮箱账户?

google域名邮箱设置教程&#xff1f;如何开通Google域名邮箱&#xff1f; Google域名邮箱提供了一个专业且功能强大的平台&#xff0c;允许用户使用自定义域名创建和管理邮箱账户。烽火将详细介绍如何创建并管理Google域名邮箱账户&#xff0c;帮助您充分利用这一强大的工具。…

Java Mail腾讯企业邮箱或其他邮箱发送邮件失败bug记录

问题出现情况 邮件发送时debug用F8逐步运行可以成功发送邮件&#xff0c;但是用F9或者直接运行程序却发送失败未开启mail的debug模式的报错日志是下面这个&#xff1a;org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is java…

基于RPA+AI的网页自动填写机器人 | OPENAIGC开发者大赛高校组优秀作品

在第二届拯救者杯OPENAIGC开发者大赛中&#xff0c;涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到&#xff0c;我们特意开设了优秀作品报道专栏&#xff0c;旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者&#xff0c;希望能带给…

TXS0104 LSF0102 原理理解

具体参数请查看数据手册&#xff0c;在此不必赘述了。TXS0104 数据手册 现主要对TXS0104 结构原理进行解析&#xff1a; 电平转换电路结构可参考如下电路&#xff1a; 对于gate bias 部分电路具体细节有兴趣的可以了解下。 对于LSF0102 系列的电平转换芯片 LSF0102 数据手…

【人工智能学习之PaddleOCR训练教程】

具体的训练教程&#xff1a; 准备数据集 OCR数据集 &#xff08;以下文字转载官方文档ocr_datasets&#xff09; 1. 文本检测 1.1 PaddleOCR 文字检测数据格式1.2 公开数据集 1.2.1 ICDAR 2015 2. 文本识别 2.1 PaddleOCR 文字识别数据格式2.2 公开数据集 2.1 ICDAR 2015 …

使用Spring Security实现用户-角色-资源的权限控制

文章目录 一、基于角色的请求控制二、加载用户角色信息三、角色与资源的关联四、测试角色权限控制1. 未登录用户访问受保护资源2. 登录用户访问受保护资源3. 角色不足的用户访问受保护资源&#xff08;把前面改成.roles("USER")&#xff09; 五、自定义异常处理1. 自…

CANoe的数据回放功能

文章目录 CANoe简介1.Offline回放功能2.Replay Block回放模块3.两者的异同 CANoe简介 CANoe&#xff08;CAN open environment&#xff09;&#xff1a; 用于汽车ECU网络仿真、数据分析、测试和诊断&#xff0c;还可以进行数据回放、程序刷写等。具有实时报文跟踪、数据解析及…

Android开发启动页跳过倒计时效果

Android开发启动页跳过倒计时效果 app启动页都会放些广告图&#xff0c;然后倒计时跳过。 一、思路&#xff1a; 不是很难&#xff0c;就用用个倒计时控制mHandler.sendEmptyMessageDelayed(WHAT_COUNT_DOWN, 100); 二、效果图&#xff1a; 三、关键代码&#xff1a; publ…

消息队列面试题——第二篇

1. rocketmq、rabbitmq、kafka的区别 架构设计和消息模型 特性rocketmqrabbitmqkafka消息模型基于主题和消费组&#xff0c;支持发布/订阅和点对点两种模型基于队列模型&#xff0c;支持发布/订阅和点对点两种模型基于分区的主题模型&#xff0c;主要用于日志流式处理和高吞吐…

基于SSM创城志愿者管理系统JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档&#xff08;1万字以上&#xff09;开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统&#xff1a;Window操作系统 2、开发工具&#xff1a;IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

RNN心脏病预测

本文为为&#x1f517;365天深度学习训练营内部文章 原作者&#xff1a;K同学啊 一 前期准备 1.数据导入 import pandas as pd from keras.optimizers import Adam from matplotlib import pyplot as plt from sklearn.model_selection import train_test_split from sklearn.p…

jenkins 插件Publish Over SSH

一、安装插件 二、配置sshserver http://192.168.31.156:8080/manage/configure 三、添加自由风格&#xff1a;PublishOverSSHDemo 我们将工作目录&#xff1a;/var/lib/jenkins/workspace/PublishOverSSHDemo下的图片m3.jpeg 同步到目标143服务器目录&#xff1a;/root/imag…

Mysql(七) --- 索引

文章目录 前言1.简介1.1.索引是什么&#xff1f;1.2.为什么使用索引? 2.索引应该使用什么数据结构&#xff1f;2.1.Hash2.2.二叉搜索树2.3.N叉树2.4.B树2.4.1. 简介2.4.2. B树的特点2.4.3. B树和B树的对比 3.Mysql中的页3.1.为什么要使用页3.2.页文件头和页文件尾3.3.页主体3.…

Python开源项目月排行 2024年9月

#2024年9月2024年9月29日1jax一个开源的高性能数值计算库&#xff0c;旨在为机器学习和科学计算提供灵活性和效率。该项目由 Google 研发&#xff0c;并在 GitHub 上进行维护。AX 主要用于以下几个方面&#xff1a; 自动微分&#xff1a;提供高效的自动微分功能&#xff0c;支持…

嵌入式面试——FreeRTOS篇(九) 内存管理

本篇为&#xff1a;FreeRTOS 内存管理篇 一、FreeRTOS内存管理简介 1、FreeRTOS内存管理介绍 答&#xff1a; 在使用 FreeRTOS 创建任务、队列、信号量等对象的时&#xff0c;一般都提供了两种方法&#xff1a; 动态方法创建&#xff1a;自动地从 FreeRTOS 管理的内存堆中申…

【AI绘画教程】StableDiffusion出图颜色偏白发灰?用好VAE立马解决!(附VAE模型下载)

大家好&#xff0c;我是画画的小强 之前已经给大家推荐过不少AI绘画中 Stable Diffusion WebUI 的大模型&#xff0c;今天为大家介绍一下 WebUI 中“外挂VAE”的相关内容&#xff0c;可以解决我们在用大模型出图过程中出现的图像颜色发灰、发白的问题&#xff0c;一起来看看吧…