QT6 源(130)视图模型架构中的字符串列表模型 QStringListModel:

(1)字符串列表型的 model ,可以交给视图 view 来显示,也可以由组合框 comboBox 读取其中的内容

在这里插入图片描述

(2)以下开始学习本字符串 model 里的成员函数,本类没有再定义信号与槽函数

在这里插入图片描述

++

在这里插入图片描述

++

(3)

谢谢

### Qt 模型-视图架构概述 Qt模型-视图架构是一种设计模式,旨在将数据(模型)与其展示方式(视图)分离开来。这种分离使得应用程序更加模块化和可维护。在 Qt 中,所有的模型类都继承自 `QAbstractItemModel` 类[^2],它定义了一组标准接口,允许视图访问并操作模型中的数据。 对于列表、表格以及树形结构的数据展示需求,Qt 提供了几种常见的视图组件,例如 `QListView`, `QTreeView`, 和 `QTableView` 等[^1]。而为了适配这些视图,开发者可以选择使用内置的模型或者创建自己的定制模型。 #### 示例:基于字符串列表的简单模型-视图应用 下面是一个简单的例子,演示如何利用 `QStringListModel` 来管理一组字符串,并将其绑定到 `QListView` 上: ```cpp #include <QApplication> #include <QListView> #include <QStringListModel> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建一个字符串列表模型实例 QStringList stringList; stringList << "Apple" << "Banana" << "Cherry"; QStringListModel model(stringList); // 设置视图并与模型关联 QListView listView; listView.setModel(&model); // 显示窗口 listView.show(); return app.exec(); } ``` 此代码片段展示了如何快速搭建起一个基本的应用程序界面,在其中可以通过 `QListView` 查看由 `QStringListModel` 维护的一系列条目。 #### 自定义模型实现 如果需要更复杂的功能,则可能要自己编写新的模型类。比如,假设我们想要构建一个能够存储二维数组信息并且兼容 `QTableView` 的表单模型。这时就需要从 `QAbstractTableModel` 或者其他合适的抽象基类出发进行扩展: ```cpp class MyCustomTableModel : public QAbstractTableModel { public: explicit MyCustomTableModel(QObject* parent = nullptr): QAbstractTableModel(parent), data(3, std::vector<int>(4)) {} int rowCount(const QModelIndex& parent = QModelIndex()) const override {return static_cast<int>(data.size()); } int columnCount(const QModelIndex& parent = QModelIndex()) const override{return static_cast<int>(data.at(0).size()); } QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override{ if (!index.isValid() || index.row() >= rowCount() || index.column() >= columnCount()) return {}; switch (role){ case Qt::DisplayRole:{ auto row = index.row(); auto col = index.column(); return QString::number(data[row][col]); }break;default:return {}; }; }; private: std::vector<std::vector<int>> data{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; }; ``` 在这个例子中,我们实现了必要的虚函数如 `rowCount()` , `columnCount()` 及重载版的 `data()` 方法以便正确响应来自视图端请求的具体单元格数值显示内容[^2]. 最后一步就是把我们的自定义模型连接到实际使用的视图控件上去: ```cpp MyCustomTableModel customModel; QTableView tableView; tableView.setModel(&customModel); tableView.show(); ``` 以上即完成了整个流程设置工作流说明。 #### 关于代理模型 除了基础的模型外,还有所谓的 **代理模型**(Proxy Model),它们主要负责过滤或重新排列现有模型的内容而不改变原始数据本身。例如 `QSortFilterProxyModel` 就是用来排序筛选记录的一个典型代表[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值