使用样式表定义标签背景而不更改QWidget?

时间:2012-10-20 22:29:35

标签: qt tabs qtscript qtstylesheets

我想创建一个非常基本的GUI:标签,文本区域。

但我想为我的标签着色,让它们在MAC,Windows和Linux上看起来一样。

所以,我尝试使用样式表:

QTabWidget::pane
{
    border-top: 2px solid #1B1B1B;
    background-color: #262626;
}

QTabWidget::tab-bar
{
    left: 5px;
    alignment: left;
    background: #3E3E3E;
}

QTabBar::tab
{
    background: transparent;
    color: #757575;
    padding: 15px 5px 15px 5px;
}

QTabBar::tab:hover
{
    text-decoration: underline;
}

QTabBar::tab:selected
{
    color: #DEF600;
    background: qlineargradient( x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #262626, stop: 1.0 #3D3D3D );
}

但即使选项卡看起来很好,也会出现问题:选项卡窗格仍然是透明的......

我可以通过添加:

强制背景颜色
QWidget
{
    background-color: #262626;
}

但是如你所知,这会改变所有小部件的背景颜色,甚至我的QPlainTextEdit,我仍然希望有白色背景。更烦人的是,这会重置操作系统皮肤并显示丑陋的滚动条(我真的想保留它们)。

有没有办法更改标签窗格背景而无需重新分配所有组件?

6 个答案:

答案 0 :(得分:5)

我遇到了同样的问题。我可以用它来解决这个问题:

QTabWidget::pane > QWidget {
    background-color: #262626;
}

答案 1 :(得分:3)

试试这个。

QTabWidget::pane {
    background: red;
}

您可以阅读this了解详情。还有一件事要评论。您可以使用QObject :: objectName()作为样式表的id选择器。例如,

QTabWidget#myTab { ... }

希望这会有所帮助。

答案 2 :(得分:1)

可以简单地通过:

* {background: green;}

此样式为此小部件及其所有子级设置背景,因此您需要了解一件重要事情。您认为QTabWidget的区域实际上是QWidget,其在QTabWidget内设置为 。您可以通过添加样式轻松检查QTabWidget的位置以及他们的孩子在哪里

QTabWidget::pane {background: green; padding: 10px;}

绿色区域为QTabWidget,内部所有内容都与QTabWidgets子项重叠(QWidget函数添加的任何addTab()

答案 3 :(得分:0)

添加样式

 "background-color:rgb(255,255,255)"    

到每个标签。

答案 4 :(得分:0)

参考: http://doc.qt.digia.com/qt/stylesheet-syntax.html

选择器类型下的读取ID选择器。您可以指示仅将某个样式应用于给定的对象名称。因此,您可以使用您为tabWidget提供的任何名称。

答案 5 :(得分:0)

尝试使用

启用文档模式

myTab->setDocumentMode(true);

当其他一切都失败时,这对我有用。你可以在代码中完成它,或者在qtcreator中修改属性。

您可能还需要将一些样式应用于窗格,如下所示:

QTabWidget:pane{
background: red;
}

documentation中了解详情。