Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2170|回复: 1
打印 上一主题 下一主题

树控件级联

[复制链接]

165

主题

269

帖子

957

积分

认证用户组

Rank: 5Rank: 5

积分
957
跳转到指定楼层
楼主
发表于 2017-1-20 11:03:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

1.根据行、列及父项信息生成 QModelIndex
  1. QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent) const
  2. {
  3.     if (parent.isValid() && parent.column() != 0)
  4.         return QModelIndex();

  5.     TreeItem *parentItem = getItem(parent);

  6.     TreeItem *childItem = parentItem->child(row);
  7.     if (childItem)
  8.         return createIndex(row, column, childItem);
  9.     else
  10.         return QModelIndex();
  11. }
复制代码
注:QModelIndex在这起到一个数据和界面关联的作用,即开始时根据行列设置对应的项信息指针(TreeItem *childItem),供后面获取数据时获取((index.internalPointer())

2.每一个单元格数据的获取 即根据QModelIndex(内部含有行、列及父项信息)得到要显示的数据
  1. QVariant TreeModel::data(const QModelIndex &index, int role) const
  2. {
  3.     if (!index.isValid())
  4.         return QVariant();

  5.     if (role != Qt::DisplayRole && role != Qt::EditRole)
  6.         return QVariant();

  7.     TreeItem *item = getItem(index);

  8.     return item->data(index.column());
  9. }

  10. TreeItem *TreeModel::getItem(const QModelIndex &index) const
  11. {
  12.     if (index.isValid()) {
  13.         TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
  14.         if (item)
  15.             return item;
  16.     }
  17.     return rootItem;
  18. }
复制代码
回复

使用道具 举报

165

主题

269

帖子

957

积分

认证用户组

Rank: 5Rank: 5

积分
957
沙发
 楼主| 发表于 2017-1-20 12:03:58 | 只看该作者
TreeItem  本身是一个树型内存结构,内部维护了所有子节点及父节点。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-26 06:44 , Processed in 0.058081 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表