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

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

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设计模式的使用!

相关推荐

啊啊啊都冬天了,为什么最近还这么多蚊子?!
懘的解释

懘的解释

07-18 👁️‍🗨️ 9424
康熙字典:诺的字义解释,拼音,笔画,五行属性,诺的起名寓意
【三星GALAXY S7系列韩国,韩国,5G手机,安卓(Android),后置多镜头,256GB,韩国,1亿像素及以上手机】报价
《大侠立志传》口才提升技巧一览

《大侠立志传》口才提升技巧一览

07-17 👁️‍🗨️ 2466