如何在QTreeWidget / QTreeView中选择第一个分支?
我需要在整行上绘制边框,包括项目和分支。我尝试使用QSS代码来定义悬停样式:
TreeWidget::item:hover {
border-top: 1px solid #8C8C8C;
border-bottom: 1px solid #8C8C8C;
}
TreeWidget::item:last:hover {
border-right: 1px solid #8C8C8C;
}
TreeWidget::branch:hover {
border-top: 1px solid #8C8C8C;
border-bottom: 1px solid #8C8C8C;
border-left: 1px solid #8C8C8C;
}
这仅适用于具有一个分支元素的项目:
但是会为任何子项添加额外的垂直线:
如何仅为第一个分支项目绘制左边框?像这样的东西(但这个不起作用):
TreeWidget::branch:first:hover {
border-left: 1px solid #8C8C8C;
}
UPD1:
我没有找到从qss获得第一个分支的方法,但我找到了一个只添加左垂直线的解决方案。这可以从paintEvent
:
void TreeWidget::paintEvent(QPaintEvent* event)
{
QTreeWidget::paintEvent(event);
QPainter painter(viewport());
auto r = visualItemRect(itemAt(mapFromGlobal(QCursor::pos())));
painter.drawLine(0, r.top(), 0, r.bottom());
}