带滚动条的QTreeView样式表自定义问题

时间:2009-04-16 16:45:37

标签: qt

下面的屏幕截图中有两个QTreeView。对于右边的那个,我添加了一个css定制:

setStyleSheet(
    "background-color: #EAF5FF;"
    "alternate-background-color: #D5EAFF;"
);

但请注意,滚动条外观已更改。它采用了“windows”风格,而不是“windowsxp”风格(这是默认设置,因为我是在Xp下开发的。)

如何在不更改滚动条外观的情况下使用上述样式设置?

我正在使用QT 4.5和Windows XP。

ScreenShot

2 个答案:

答案 0 :(得分:3)

除了你可以直接做的事情之外,你还需要css定制给你的能力吗?要更改颜色,您可以直接使用窗口小部件的调色板来执行此操作,这应该保留您的样式。

另外,请记住样式更改是继承的,因此如果右侧包含树的任何窗口小部件的样式与左侧包含树的任何样式不同,那么也可能导致更改。

除此之外,我认为这似乎是一个Qt错误,如果确实唯一的区别是css样式表。

答案 1 :(得分:2)

走QPalette路线的建议得以实现。这是解决方案:

#if 0  // this causes the problem
    setStyleSheet(
        "background-color: #EAF5FF;"
        "alternate-background-color: #D5EAFF;"
    );
#else // this works correctly
    QPalette p = palette();
    p.setColor(QPalette::Base, QColor(qRgb(0xEA, 0xF5, 0xFF)));
    p.setColor(QPalette::AlternateBase, QColor(qRgb(0xD5, 0xEA, 0xFF)));
    setPalette(p);
#endif

两种方法都应该按照文档工作,所以我要说它是一个Qt bug。

编辑:在过去几天使用这种新方法后,我注意到可能也会有性能提升。