绘制QTreeViewItem的展开按钮及其兄弟/子项线条
我正在使用QTreeView和QItemDelegate来重新实现大部分绘制的过程。不过,展开/折叠按钮和兄弟/子项的连接线是由其他绘制过程自动生成的。
我想知道是谁在绘制这些东西,以及我该如何控制它。
编辑:
目前,Qt绘制QTreeView中的项目顺序是这样的:
[展开按钮] -- [复选框] -- [其他树项内容]
我想要的顺序是:
[复选框] -- [展开按钮] -- [其他树项内容]
问题是,我在QItemDelegate中的所有绘制都在展开按钮的右边。
2 个回答
1
行的绘制是通过QTreeView.drawRow来完成的,而树枝和展开图标则是在drawBranches中绘制的。如果你重新实现这个方法,让它什么都不做,就可以去掉所有自动绘制的内容。
def drawBranches(self,painter,rect,index):
pass
不过,单纯在绘制时交换按钮和复选框是行不通的,因为那样的话,点击复选框会触发按钮的操作,反之亦然。
1
你可以通过使用一个样式表来改变这些东西。这段内容来自于自定义 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文件名就是你想要使用的图片。