QStyleSheet - установка border-image для кнопки также устанавливает фоновое изображение для ее всплывающей подсказки
У меня проблема с настройкой border-image
свойство QToolButton
(позже также QPushButton
но я предполагаю, что проблема будет возникать и там). Каждая из моих пользовательских кнопок (наследуется от QToolButton
а также QPushButton
соответственно) должен иметь 3 состояния - неактивное, работающее и ошибочное.
Неактивный:
style = 'border-top-right-radius: ' + str(self.cornerRadius) + 'px; border-bottom-right-radius: ' + str(self.cornerRadius) + 'px; border-top-left-radius: ' + str(self.cornerRadius) + 'px; border-bottom-left-radius: ' + str(self.cornerRadius) + 'px; border-image: url("' + self.icon + '"); background: none;'
Бег:
style = 'border-top-right-radius: ' + str(self.cornerRadius) + 'px; border-bottom-right-radius: ' + str(self.cornerRadius) + 'px; border-top-left-radius: ' + str(self.cornerRadius) + 'px; border-bottom-left-radius: ' + str(self.cornerRadius) + 'px; border-image: url("' + self.icon + '"); background: rgb(89, 205, 139);'
Ошибка:
style = 'border-top-right-radius: ' + str(self.cornerRadius) + 'px; border-bottom-right-radius: ' + str(self.cornerRadius) + 'px; border-top-left-radius: ' + str(self.cornerRadius) + 'px; border-bottom-left-radius: ' + str(self.cornerRadius) + 'px; border-image: url("' + self.icon + '"); background: rgb(215, 56, 56);'
где self.cornerRadius
это некоторое число, используемое для определения округлости моих кнопок в пикселях и self.icon
это значок, который я получил откуда-то
Все, что я делаю в конструкторе моей кнопки (среди других простых инициализаций),
self.setStyleSheet(style)
clicked()
сигнал кнопки подключается к слоту в том же классе, где состояние изменяется (вместе со стилем, использующим self.setStyleSheet(...)
) относительно нового состояния системы.
По какой-то неизвестной причине моя всплывающая подсказка получает изменения стиля кнопки, которой она "принадлежит":
Я дважды проверил документацию по Qt и не вижу причин, объясняющих это поведение. Я НЕ хочу менять стиль всплывающей подсказки. Любые идеи, как это исправить?
1 ответ
Я интерпретирую вопрос как:
Как избежать наложения стиля, предназначенного для одного типа виджета, на другой?
Имейте в виду, что:
- Таблица стилей распространяется от родительских к дочерним виджетам.
Таблица стилей имеет видимость, которую вы можете явно установить для типа.
myObj.setStyleSheet("QPushButton {border: 0.05em solid lightgray;}" )
Просто приложите таблицу стилей с типом, например QType { ... }
,
Я имею дело только с C++ Qt, но думаю, что PyQt использует ту же систему стилей.