Qt Model/View理解(一)---构造model

[原博客地址:]https://blog.csdn.net/lutao614/article/details/80859968





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

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

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


   
   
  1. class ComboxModel : public QAbstractListModel
  2. {
  3. Q_OBJECT
  4. public:
  5. ComboxModel(QStringList &_list,QObject *parent = 0);
  6. ~ComboxModel();
  7. //QAbstractListModel 中3个必须重新实现的虚函数
  8. int rowCount(const QModelIndex & parent = QModelIndex()) const;
  9. int columnCount(const QModelIndex & parent = QModelIndex()) const;
  10. QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
  11. private:
  12. QStringList list;
  13. };

2.方法实现


   
   
  1. //将QStringList中的字符串显示在combox中。
  2. ComboxModel::ComboxModel(QStringList &_list,QObject *parent) : list(_list),QAbstractListModel(parent)
  3. {
  4. }
  5. ComboxModel::~ComboxModel()
  6. {
  7. }
  8. //体现model的行数,这里就是list的个数
  9. int ComboxModel::rowCount( const QModelIndex & parent) const
  10. {
  11. return list.count();
  12. }
  13. //体现model的列数,这里只有1列
  14. int ComboxModel::columnCount( const QModelIndex & parent) const
  15. {
  16. return 1;
  17. }
  18. //体现model中显示的数据,这里只是list中每一个子项。
  19. QVariant ComboxModel::data( const QModelIndex & index, int role) const
  20. {
  21. if (Qt::DisplayRole == role)
  22. {
  23. return list.at(index.row()); //返回list每一项
  24. }
  25. return QVariant::Invalid;
  26. }

3.界面上的combox与model进行关联。


   
   
  1. Widget::Widget(QWidget *parent)
  2. : QWidget(parent)
  3. {
  4. this->resize( 200, 200);
  5. QComboBox *combox = new QComboBox( this);
  6. combox->setGeometry( 50, 50, 100, 40);
  7. QStringList list;
  8. list<<“123”<<“345”<<“546”<<“apple”;
  9. //创建model并初始化它。
  10. ComboxModel *model = new ComboxModel( list);
  11. combox->setModel(model);
  12. }

4.最后效果




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值