数据是一个集合,显示也是一个集合。例如一篇《西游记》的文章,所有的文字就是数据集合,展示方式就是显示的集合,可以以书本的形式,也可以以电纸书的形式,更可以用视频的方式展现。

下面是将一个二维数组中的数据显示到TableView控件中。

1.声明一个model类,继承于QAbstractTableModel

#define ROW 3#define COL 2 class TableModel : public QAbstractTableModel{ Q_OBJECTpublic: TableModel(QObject *parent = 0); ~TableModel(); //QAbstractTableModel 中3个必须重新实现的虚函数 int rowCount(const QModelIndex & parent = QModelIndex()) const; int columnCount(const QModelIndex & parent = QModelIndex()) const; QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const; private: int num[ROW][COL]; int nn;};2.方法实现

TableModel::TableModel(QObject *parent) :QAbstractTableModel(parent){ //二维数初始化,从100开始 nn = 100; for(int i=0;i

Widget::Widget(QWidget *parent) : QWidget(parent){ this->resize(300,200); TableModel *model = new TableModel(); QTableView *tableview = new QTableView(this); tableview->setModel(model); tableview->setGeometry(5,5,280,180);}4.显示效果,3行2列

 

目前的实现都是从定义好的model中取出数据,放在不同的显示控件中,相当于只读,没有对数据部分做任何修改。下一节将以此篇为基础,介绍如何对数据部分进行操作。--------------------- 作者:涛水 来源:CSDN 原文:https://blog.csdn.net/lutao614/article/details/80863790 版权声明:本文为博主原创文章,转载请附上博文链接!

 

 

模型/视图将数据和显示分开进行处理,中间通过代理做桥梁。

如果想往QCombox中添加一些子项,你会怎么做呢?除了常用的addItem方法,下面介绍通过模型/视图的方式添加,逐步理解模型/视图的使用方法。

1.首先添加一个类,继承自QAbstractListModel

class ComboxModel : public QAbstractListModel{ Q_OBJECTpublic: ComboxModel(QStringList &_list,QObject *parent = 0); ~ComboxModel(); //QAbstractListModel 中3个必须重新实现的虚函数 int rowCount(const QModelIndex & parent = QModelIndex()) const; int columnCount(const QModelIndex & parent = QModelIndex()) const; QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;

private: QStringList list;

};2.方法实现

//将QStringList中的字符串显示在combox中。ComboxModel::ComboxModel(QStringList &_list,QObject *parent) :list(_list),QAbstractListModel(parent){}

ComboxModel::~ComboxModel(){}

//体现model的行数,这里就是list的个数int ComboxModel::rowCount(const QModelIndex & parent) const{ return list.count();}

//体现model的列数,这里只有1列int ComboxModel::columnCount(const QModelIndex & parent) const{ return 1;}

//体现model中显示的数据,这里只是list中每一个子项。QVariant ComboxModel::data(const QModelIndex & index, int role) const{ if (Qt::DisplayRole == role) { return list.at(index.row());//返回list每一项 } return QVariant::Invalid;}3.界面上的combox与model进行关联。

Widget::Widget(QWidget *parent) : QWidget(parent){ this->resize(200,200);

QComboBox *combox = new QComboBox(this); combox->setGeometry(50,50,100,40);

QStringList list; list<<"123"<<"345"<<"546"<<"apple"; //创建model并初始化它。 ComboxModel *model = new ComboxModel(list);

combox->setModel(model);}4.最后效果

 

--------------------- 作者:涛水 来源:CSDN 原文:https://blog.csdn.net/lutao614/article/details/80859968 版权声明:本文为博主原创文章,转载请附上博文链接!

查看原文