Измените, в каком столбце QTreeView отображается значок развернуть / свернуть - PullRequest
0 голосов
/ 09 июля 2019

Qt версия 4.8.4

У меня есть QTreeView, который отражает производную от QAbstractItemModel модель. Модель предоставляет данные в нескольких столбцах. Значок раскрытия / сворачивания для строки представления всегда отображается в ячейке в столбце с логическим индексом нуля, даже если этот столбец был перемещен так, что у него есть визуальный индекс, отличный от нуля.

Обязан ли QTreeView всегда рисовать значок развертывания / свертывания в нулевом логическом столбце? Это можно настроить с помощью QTreeView или модели?

1 Ответ

0 голосов
/ 10 июля 2019

Значок раскрытия / свертывания, наряду со всеми другими линиями ветвления дерева, действительно вынужден всегда рисовать в нулевом логическом столбце.В Qt / 4.8.4 / src / gui / itemviews / qtreeview.cpp в методе QTreeView::drawRow() он жестко задан для вызова QTreeView::drawBranches(), только если headerSection (который содержит логический индекс столбца) равен нулю.

void QTreeView::drawRow( QPainter * painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
  ...

  for ( int currentLogicalSection = 0; currentLogicalSection < logicalIndices.count(); ++currentLogicalSection )
  {
    int headerSection = logicalIndices.at(currentLogicalSection);

    ...

    // If the zeroeth logical column, ...
    if ( headerSection == 0 )
    {
      ...

      // ... draw tree branches and stuff.
      drawBranches(painter, branches, index);
    }
    else
    {
      ... 
    }

    ...
  }

  ...
}
...