• 7868阅读
  • 9回复

[提问](已解决)给QComboBox设置自定义的Model后, 点击ComboBox不显示下列菜单了?! [复制链接]

上一主题 下一主题
离线liuxu_lx7
 
只看楼主 倒序阅读 楼主  发表于: 2011-08-23
  1. CustomModel* pModel = new CustomMode;            
  2. QComboBox* pCmb = new QComboBox;
  3. pCmb->setModel(pModel);

为ComboBox设置了自定义的Model, 结果点击ComboBox显示不出来下来菜单


正确的显示应类似:


离线wxj120bw

只看该作者 1楼 发表于: 2011-08-23
回 楼主(liuxu_lx7) 的帖子
你确定Model有数据吗
离线liuxu_lx7
只看该作者 2楼 发表于: 2011-08-23
回 1楼(wxj120bw) 的帖子
肯定有数据,因为我用 【上下键】可以选中下面的项
离线wxj120bw

只看该作者 3楼 发表于: 2011-08-23
回 2楼(liuxu_lx7) 的帖子
难道数据获取放到了CustomModel实现的 能贴下你获取数据代码
离线liuxu_lx7
只看该作者 4楼 发表于: 2011-08-24
  1. QVariant CustomModel::data(const QModelIndex& index, int role /* = Qt::DisplayRole */) const
  2. {
  3.     if (!index.isValid())
  4.     return QVariant();
  5.     int s4Row = index.row();
  6.     if (s4Row >= m_vecTypeDescItem.size())
  7.     return QVariant();
  8.     return m_vecTypeDescItem[s4Row]->Text();
  9. }
  10. int CustomModel::rowCount(const QModelIndex& parent/* = QModelIndex()*/) const
  11. {
  12.     return m_vecTypeDescItem.size();
  13. }
  14. int CustomModel::columnCount(const QModelIndex& parent/* = QModelIndex()*/) const
  15. {
  16.     return 1;
  17. }
m_vecTypeDescItem里的对象是一个自定义的类,Text()就是取得它要显示的文字。
  1. class QTypeComboListModel : public QAbstractListModel
跟 Model/View 有关的部分,就是这些。



离线roywillow

只看该作者 5楼 发表于: 2011-08-24
那个data函数是不是要根据role进行一下选择呢?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线wxj120bw

只看该作者 6楼 发表于: 2011-08-25
回 4楼(liuxu_lx7) 的帖子
楼上可能是对的 看下这个例子browser\bookmarks.cpp例子
离线liuxu_lx7
只看该作者 7楼 发表于: 2011-08-25
回 5楼(roywillow) 的帖子
多谢,您说的是对的。
离线liuxu_lx7
只看该作者 8楼 发表于: 2011-08-25
回 6楼(wxj120bw) 的帖子
多谢
离线liuxu_lx7
只看该作者 9楼 发表于: 2011-08-25
5、6楼的朋友说的是对的。感谢  
是由 role 引起的。改成这样就对了
  1. if (!index.isValid())
  2.     return QVariant();
  3. int s4Row = index.row();
  4. if (s4Row >= m_vecTypeDescItem.size())
  5.     return QVariant();
  6. if (role == Qt::DisplayRole)
  7.     return m_vecTypeDescItem[s4Row]->Text();
  8. return QVariant();

关键是红色这句,并在其余所有情况返回 QVariant();
快速回复
限100 字节
 
上一个 下一个