只能记忆展开状态,滚动状态没支持,因为这个树控件 ,可能不使用了 ,半成品
#ifndef QTREEVIEWNOKBD_H
#define QTREEVIEWNOKBD_H
#include "Header.h"
typedef struct _NodeP
{
int nRowNo;
std::vector<_NodeP> arChildren;
}NodeExpand;
class QTreeViewNoKbd : public QTreeView
{
public:
QTreeViewNoKbd();
void keyPressEvent(QKeyEvent *event);
void startRemeberNode();
void startExpandNode();
private:
void recursiveRememberNodeState(NodeExpand& ne, QModelIndex root);
void recursiveExpandNode(NodeExpand& ne, QModelIndex root);
NodeExpand m_nodeExpand;
};
#endif // QTREEVIEWNOKBD_H
#include "TreeViewNoKbd.h"
QTreeViewNoKbd::QTreeViewNoKbd()
{
setUniformRowHeights(true);
}
void QTreeViewNoKbd::keyPressEvent(QKeyEvent *event)
{
switch (event->key())
{
case Qt::Key_Down:
case Qt::Key_Up:
break;
default:
QTreeView::keyPressEvent(event);
break;
}
}
void QTreeViewNoKbd::recursiveRememberNodeState(NodeExpand &ne, QModelIndex root)
{
int nChild = model()->rowCount(root);
for (int i = 0; i < nChild; i++)
{
QModelIndex index = model()->index(i, 0, root);
if (this->isExpanded(index))
{
NodeExpand n;
n.nRowNo = i;
recursiveRememberNodeState(n, index);
ne.arChildren.push_back(n);
}
}
}
void QTreeViewNoKbd::recursiveExpandNode(NodeExpand &ne, QModelIndex root)
{
QModelIndex index = model()->index(ne.nRowNo, 0, root);
if (!index.isValid())
{
return;
}
this->expand(index);
for (int i = 0; i < ne.arChildren.size(); i++)
{
recursiveExpandNode(ne.arChildren[i], index);
}
}
void QTreeViewNoKbd::startExpandNode()
{
QModelIndex root = this->rootIndex();
for (int i = 0; i < m_nodeExpand.arChildren.size(); i++)
{
this->recursiveExpandNode(m_nodeExpand.arChildren[i], root);
}
}
void QTreeViewNoKbd::startRemeberNode()
{
QModelIndex root = this->rootIndex();
recursiveRememberNodeState(m_nodeExpand, root);
}