뷰가 QTreeView 기반 클래스이고 모델이 QAbstractItemModel 기반 클래스 인 Qt 기반 트리 뷰를 구현하고 있습니다. 나무는 수백만 개의 노드를 가지고 있다고 가정합니다. 필터링 된 노드를 트리보기에 그냥 숨기는 필터링 메커니즘을 구현하고 있습니다. (나는 QSortFilterProxyModel
을 사용하고 싶지 않다.)QAbstractItemModel 파생 모델에서 숨길 행에 플래그를 지정하는 방법
모델의 내부 데이터 구조는 다소 비슷하다.
class MyTreeItem
{
...
private:
QList<MyTreeItem *> _children;
bool _isHidden;
};
class MyTreeModel : public QAbstractItemModel
{
...
private:
MyTreeItem * _rootNode;
};
I 모델 데이터 구조가 채워되는 동안 특정 노드 (MyTreeItem *)가 필터링되어야 하는지를 결정할 수있다. 따라서 QTreeView가 전체 트리를 다시 가로 지르고 데이터를 채운 후 행을 숨기지 않고 데이터 구조를 채우는 동안이 항목을 숨겨야한다는 사실을 알리고 자합니다.
솔직히 나는 디자인 단계에 있으므로 실제 코드가 없습니다. 내 요구 사항은 데이터 구조를 채우는 동안 현재 노드를 필터링해야하는지 여부를 결정하고, 그렇다면 플래그 _isHidden
을 설정합니다. 그러나 나는보기를 QTreeView::setRowHidden()
또는 기타 다른 방법으로 호출하여 행을 숨길 때를 알 수있는 방법을 모르겠습니다.
최선의 방법에 대한 의견을 공유해주세요. 감사합니다. .
왜 ['QSortFilterProxyModel'] (http://doc.qt.io/qt-5/qsortfilterproxymodel.html)을 사용하지 않으시겠습니까? 당신이 제공 한 설명에서 그것은 작업을위한 올바른 도구 일 것입니다. –
@ G.M. 프로젝트 팀은'QSortFilterProxyModel '을 사용하는 것이 성능에 부담이된다고 결정했습니다. 그래서 그것은 방정식에서 벗어나야합니다. – susiriss
모델에 항목을 표시하지 않으려면 왜 그 항목을 포함시켜야합니까? 그냥 추가하지 마십시오. –