Определить фон вкладок с таблицами стилей без изменения QWidget?

Я хочу сделать очень простой графический интерфейс: вкладки, текстовая область.

Но я хочу раскрасить свои вкладки и сделать так, чтобы они всегда выглядели одинаково на 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, который я все еще хочу иметь белым фоном. И что еще раздражает, это сбрасывает скин ОС и отображает уродливые полосы прокрутки (очень хочется оставить их такими, какие они были).

Есть ли способ изменить фон панели вкладок без изменения всех компонентов?


person MARTIN Damien    schedule 20.10.2012    source источник


Ответы (6)


У меня такая же проблема. Я мог заставить его работать с этим:

QTabWidget::pane > QWidget {
    background-color: #262626;
}
person Ruan    schedule 12.07.2017
comment
Я искал по всему миру, как правильно установить цвет фона для QTabWidget, и этот пост помог мне в этом. Это должно быть отмечено как правильный ответ. - person Stanton; 22.08.2017
comment
Наконец-то полезный ответ, его действительно нужно сделать более заметным! - person CybeX; 27.01.2018
comment
Это также изменяет цвет фона всех дочерних виджетов. У меня был больший успех с QTabBar { background-color: #262626; } - person elsamuko; 10.02.2020

Попробуй это.

QTabWidget::pane {
    background: red;
}

Вы можете прочитать это для Детали. И еще один комментарий. Вы можете использовать QObject::objectName() в качестве селектора идентификатора таблицы стилей. Например,

QTabWidget#myTab { ... }

надеюсь это поможет.

person Joonhwan    schedule 21.10.2012
comment
изменение цвета фона на QTabWidget::pane у меня не работает. Похоже, фон все еще прозрачный. На данный момент я решил это, настроив цвет фона QMainWindow (это работает для меня, но не будет решением в общих случаях). - person MARTIN Damien; 21.10.2012
comment
Стиль QWidget имеет иерархию. Прежде чем двигаться дальше, сначала создайте простое приложение, в котором настроен только стиль QTabWidget::pane, чтобы проверить, работает ли он. И тогда я верю, что вы можете добавлять дополнительные стили один за другим, пока что-то не пойдет не так. - person Joonhwan; 21.10.2012

Можно просто:

* {background: green;}

Этот стиль устанавливает фон для этого виджета и всех его дочерних элементов, поэтому вам нужно знать одну важную вещь. Область, которую вы считаете QTabWidget, на самом деле является QWidget, расположенной внутри области QTabWidget. Вы можете легко проверить, где находится QTabWidget и где находится их дочерний элемент, добавив в свой стиль

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

зеленая область - это QTabWidget, все внутри перекрывается дочерним элементом QTabWidgets (любой QWidget, добавленный функцией addTab()).

person Michał Kaczorowski    schedule 04.07.2016

добавить стиль

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

к каждой вкладке.

person Al2O3    schedule 22.10.2012
comment
Это будет работать, но я хочу изменить цвет фона панорамы (так что там тоже нет вкладок). background-color по-прежнему не используется Qt в QTabWidget::pane, поэтому, даже если мои вкладки имеют красивый фон, пространство, где нет вкладок, останется прозрачным. - person MARTIN Damien; 22.10.2012

См. это: http://doc.qt.digia.com/qt/stylesheet-syntax.html

Прочитайте идентификатор селектора в разделе «Типы селекторов». Вы можете указать, что определенный стиль должен применяться только для данного имени объекта. Таким образом, вы можете использовать любое имя, которое вы дали своему tabWidget.

person warunanc    schedule 01.11.2012
comment
или вы можете просто установить QTabBar {background-color: #fff;} Это установит цвет для области, где нет вкладок - person warunanc; 01.11.2012

Попробуйте включить режим документа с помощью

myTab->setDocumentMode(true);

Это сработало для меня, когда все остальное потерпело неудачу. Вы можете сделать это в коде или покрутив свойство в qtcreator.

Возможно, вам все же придется применить некоторые стили к панели, например:

QTabWidget:pane{
background: red;
}

Подробнее об этом читайте в документации.

person Lennart Rolland    schedule 29.08.2013