firemail

标题: 树控件级联 [打印本页]

作者: firemail    时间: 2017-1-20 11:03
标题: 树控件级联

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. }
复制代码

作者: firemail    时间: 2017-1-20 12:03
TreeItem  本身是一个树型内存结构,内部维护了所有子节点及父节点。





欢迎光临 firemail (http://firemail.wang:8088/) Powered by Discuz! X3