Model/View模型视图
2021/7/29 23:35:58
本文主要是介绍Model/View模型视图,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
catalog
- base
- example
- Table
- TableView
- TableModel
base
一些ui部件,是要展示数据的(比如label上的数据、table里的数据),而这些数据 往往是外部动态的(比如来自于数据库)
也就是, ui部件 如何与 数据,相关联?
有两种方式:
- ui部件,内部再存储一份数据,即自己本身自带数据,这是很直观的想法
即,ui内部存储的数据 与 外部引用的数据,是两个东西。我们程序员需要自己 去确保,这两份数据是保证高度相同的。
这也说明,这种方式的 耦合性 很高。
但是,在大型项目里,这会导致数据无法同步的问题 - ui部件,内部不会存储数据。ui部件 通过标准化的接口 来访问 外部数据 数据只有1份!!
这称为:model - view
编程。
标准部件standard widget
,是使用的 第一种方式,即ui部件内部 会另存一份数据。
view widget,是使用的 第二种方式,ui部件内部并没有数据 通过(指针)链接 外部数据。
标准widget 与 view widget 同一个ui部件,对应2种实现方式
像button、lineedit这些部件,里面存储的数据 比较单一 只有1个
而像:table二维表格、list一维列表、tree可展开列表,这些部件 他里面存储的数据 是很多的!!
比如table,他二维表格 共n*m个项,都要存储数据。
example
Table
TableView
表示,存放表格table 的view
QTableView tableView; tableView.setGeometry(0, 0, 1000, 1000); tableView.show();
你这样,他是 完全空白的,连表格线都没有!!!
因为,view的row/column的个数、cell的内容,完全是由model来决定的。
view没有model,自然就是0行 0列,什么都没有。
view 必须和 model,链接一起来使用
MyTableModel model; tableView.setModel( &model ); tableView.show();
view的setModel()
函数,便是将 view和model,链接起来。
既然是table,那么MyTableModel里,需要提供哪些信息呢??
- model里,需要提供: row个数、column个数
- model里,需要提供,这row*column个cell的 数据!!
TableModel
class MyTabelModel : public QAbstractTableModel { Q_OBJECT public: MyTabelModel(QObject *parent = nullptr); int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; };
我们的tableModel,必须实现父类的 这3个纯虚函数。
row个数、column个数、以及 这个row*column个cell的内容
int rowCount(...){ return 2; } int columnCount(...){ return 3; } QVarient data(const QModelIndex &index, int role){ return QString("Row%1, Column%2") .arg(index.row() + 1) .arg(index.column() +1); }
示例:
QTableView tableView; MyTableModel myModel(); tableView.setModel( &myModel ); tableView.show();
这篇关于Model/View模型视图的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-02Java管理系统项目实战入门教程
- 2024-11-02Java监控系统项目实战教程
- 2024-11-02Java就业项目项目实战:从入门到初级工程师的必备技能
- 2024-11-02Java全端项目实战入门教程
- 2024-11-02Java全栈项目实战:从入门到初级应用
- 2024-11-02Java日志系统项目实战:初学者完全指南
- 2024-11-02Java微服务系统项目实战入门教程
- 2024-11-02Java微服务项目实战:新手入门指南
- 2024-11-02Java项目实战:新手入门教程
- 2024-11-02Java小程序项目实战:从入门到简单应用