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 использует ту же систему стилей.

Другие вопросы по тегам