其他分享
首页 > 其他分享> > Model/View模型视图

Model/View模型视图

作者:互联网

catalog

base

一些ui部件,是要展示数据的(比如label上的数据、table里的数据),而这些数据 往往是外部动态的(比如来自于数据库)

也就是, ui部件 如何与 数据,相关联?
有两种方式:


标准部件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里,需要提供哪些信息呢??

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();

在这里插入图片描述

标签:tableView,部件,视图,ui,Model,View,数据,model,view
来源: https://blog.csdn.net/weixin_42712593/article/details/119222109