Рисование QTreeViewItem раскрывает кнопки и родственные / дочерние линии - PullRequest
4 голосов
/ 03 сентября 2011

Я использую QTreeView и QItemDelegate, чтобы переопределить большую часть процедуры рисования.Однако кнопки «Развернуть / Свернуть» и родственные / дочерние линии отрисовываются автоматически с помощью некоторой другой процедуры рисования.

Что их рисует, и как я могу это контролировать?

РЕДАКТИРОВАТЬ:

В данный момент Qt рисует элемент QTreeView в следующем порядке:

[кнопка расширения] - [Флажок] - [Остальные элементы дерева]

Я хочу нарисовать его в следующем порядке:

[Флажок] - [Кнопка расширения] - [Остальные элементы дерева]

Проблема в том, что все мои картиныв QItemDelegate находится справа от кнопки расширения.

Ответы [ 2 ]

1 голос
/ 13 сентября 2011

Строки закрашиваются QTreeView.drawRow, ветви и значки раскрытия рисуются в drawBranches.Переопределите его, чтобы ничего не делать, и вы избавитесь от любого автоматически нарисованного материала:

def drawBranches(self,painter,rect,index):
    pass

К сожалению, простой обмен кнопками и флажками во время рисования не будет работать, потому что тогда щелчки на флажке вызовут кнопкуи наоборот.

1 голос
/ 03 сентября 2011

Вы можете изменить их, используя таблицу стилей .Это из примера Customizing QTreeView в таблице стилей:

 QTreeView::branch:has-siblings:!adjoins-item {
     border-image: url(vline.png) 0;
 }

 QTreeView::branch:has-siblings:adjoins-item {
     border-image: url(branch-more.png) 0;
 }

 QTreeView::branch:!has-children:!has-siblings:adjoins-item {
     border-image: url(branch-end.png) 0;
 }

 QTreeView::branch:has-children:!has-siblings:closed,
 QTreeView::branch:closed:has-children:has-siblings {
         border-image: none;
         image: url(branch-closed.png);
 }

 QTreeView::branch:open:has-children:!has-siblings,
 QTreeView::branch:open:has-children:has-siblings  {
         border-image: none;
         image: url(branch-open.png);
 }

, где имена файлов png - это изображения, которые вы хотите использовать.

...