ツリービュー(QTreeView)の高さの計りかた

ツリービュー(QTreeView)を使っていると画面に表示されていない部分も含めてツリービュー全体がどのくらいの高さを持つのか知りたい場合があります。

その場合は直接求めることはできないのでアイテムの個数(画面上に見えていないものを含む)を数えてから1つ当たりの高さをかければ実質的な高さを知ることができます。

その高さは次のように求められます。

QModelIndex modelIndex = treeView->rootIndex();
    /// ツリービューのトップのインデックスを取得
int rowHeight = treeView->sizeHintForIndex(treeView->rootIndex()).height();
    /// アイテム1つ当たりの高さ
int itemCount = 0;
while(modelIndex.isValid()){
    modelIndex = treeView->indexBelow(modelIndex);
    ++itemCount;
}
qDebug() << "treeView autual height = " << (itemCount * rowHeight);

まず一番上にあるインデックスを取得してその高さを求め、その後indexBelowで下にあるアイテムの個数をカウントしていっています。

indexBelowはアイテムの下に表示されているアイテムを取得できるのでアイテムが入れ子上になっていても表示されているアイテム数だけカウントできます。

例として次のようなツリービューを考えてみます。

6つのアイテムを持つツリービュー

1つのアイテムの中に複数のアイテムが入れ子になって入っています。

このツリービューのトップのアイテムは「App」なのでindexBelowで取得できる次のアイテムは「bin」、その次が「app.exe」になります。

これを繰り返すことで合計6つのアイテムがあることが分かり、1つ当たりの高さ×アイテム数で全体の高さを取得できます。

関連項目
プライバシーポリシー