Styling :: tab элемента QTabBar приводит к потере стиля - PullRequest
1 голос
/ 10 октября 2011

В моем приложении я хочу стилизовать выбранную вкладку элемента QTabBar . Стиль, который я применяю, - это только background-color , но каждый раз, когда я изменяю его атрибут background-color , все остальные стили немедленно теряются. Сначала я думал, что это проблема только для background-color , но потом, пытаясь больше, я заметил, что даже при изменении полей вкладок все остальные стили теряются. background-color других вкладок установлен на прозрачный, отступы и границы тоже потеряны.

Я думаю, что правильный способ поведения QT должен состоять в том, чтобы оставить нетронутыми атрибуты, которые я не изменил явно, но для такого очевидного поведения, которое не должно быть реализовано, должны быть другие причины, или я что-то упустил.

Это действительно «ошибка» или есть что-то, что я не учел при попытке стилизовать вкладки?

Ответы [ 2 ]

2 голосов
/ 10 октября 2011

Я считаю, что проблема, с которой вы сталкиваетесь, заключается в том, что, как только вы измените стиль элемента GUI, Qt больше не сможет рисовать его, используя встроенные элементы управления вашей ОС.встроенного виджета (вкладки, поля со списком и т. д.), вы должны быть готовы к ручному управлению стилем для каждого аспекта этого виджета, поскольку вы говорите, что вы больше не хотите, чтобы он выглядел как собственный виджет, и Qtдолжен использовать другую базовую систему рисования для визуализации виджета.

0 голосов
/ 10 октября 2011

@ Марио и в дополнение к тому, что Крис уже говорил о стилях CSS, переопределяющих стиль собственных ОС: любое приложение стиля CSS эффективно вызывает

QWidget::setStyleSheet(const QString & styleSheet)

в целевом QWidget.Это перезаписывает ранее установленный CSS таблицы стилей с помощью QString, содержащей новую таблицу стилей;Затем виджет сбрасывает себя и анализирует новый лист.Qt не достаточно умен, чтобы определить, на какие части стиля виджета повлияет ваша новая таблица стилей (и на что она не повлияет), и, кроме того, CSS не поддерживает включение и выключение применения определенного атрибута.Qt потребуется добавить возможность удаления, а также добавления атрибутов CSS для наложения нескольких таблиц стилей на один виджет для работы (и вам также, вероятно, потребуется функция «RemoveAllStyling ()»).

...