带qtreeview :: item的Qt样式表仅适用于子项?

时间:2012-12-07 14:10:00

标签: qt stylesheet qtreeview

我想设置QTreeView的项目样式,即增加它们的顶部/底部填充。 这是我的片段:

QTreeView::item
{
    padding-top:    8px;
    padding-bottom: 8px;
    color: red;
}

不幸的是,将填充应用于子项目,即。所有顶级项目都具有与以前完全相同的填充。我添加了"颜色:红色;"仅用于测试目的,但另一方面,红色文本颜色适用于所有项目,无论是顶层还是子项。

我缺少一些特殊的资格赛吗?我尝试使用:active:has-sibling,但每种情况的结果都相同。

Screenshot

我正在使用Qt 4.6.3。我也试过4.8,但结果是一样的。

2 个答案:

答案 0 :(得分:2)

问题在于我在视图上使用的QStyledItemDelegate子类。委托仅用于绘制项目的水平线,我做了重新实现sizehint函数,但经过进一步检查,似乎子类返回了错误的sizehint。

因此我接受了DanielCastro的建议,并在委托子类中使用了virtual sizehint函数。

答案 1 :(得分:1)

你在这里提到的风格应该有效。使用以下style-sheet并检查它是否产生与输出相同的输出 I have attached。使用Qt Designer来测试您的用户界面。

QTreeWidget{outline:0;}

QTreeWidget::item
{
    padding:5px;
    background-color: rgb(235, 235, 235);
    color: #1c1c1c;
    border-right: 10px solid rgb(255, 170, 0);
    font: 400 9.3pt "Segoe UI";
}

QTreeWidget::item:has-children
{
        border-right: 10px solid rgb(255, 0, 255);
}

您可以将此代码粘贴到:

Settings->Preferences->Code->Print/Preview Configuration->Style Sheet

使用Qt Designer代替在您的应用中自行测试此样式,将确保外部任何内容都不会影响您的style-sheet。如果这按预期工作,则问题出在其他地方。可能有另一种风格可以覆盖你想要的风格。