Установите CSS как в дизайнере, так и в коде для моего пользовательского виджета

У меня есть собственный виджет, производный от QPushButton, MyButton. Он реализован в одном файле .cpp, и я использую его в Qt Creator в форме моего приложения (я добавил QPushButton, а затем повысил его до MyButton).

Как обсуждалось здесь: -f">Должен ли я действительно использовать один файл qss для своего приложения вместо того, чтобы иметь один файл для каждого (UI) класса? Я хочу, как правило, установить его CSS внутри его конструктора (общий вид кнопки, фон изображение, поведение при наведении и т. д.), но я также хотел бы иметь возможность установить его в Qt Creator (возможно, настроить размер/цвет шрифта, как правило, для конкретной кнопки).

Проблема в том, что при выполнении вызова setupUi создаются мои кнопки, они устанавливают свои стили в своих конструкторах, но затем Qt применяет стили, установленные в Qt Creator, немедленно переопределяя мои.

Что я могу сделать, чтобы добиться этого эффекта?


person user4520    schedule 07.10.2015    source источник
comment
Это совсем не кажется простым. Я бы попробовал объединить таблицы стилей в переопределенном showEvent. Но если ваши таблицы стилей не являются относительно простыми — это, вероятно, будет проблемой — синтаксический анализ CSS (или QSS) — непростая задача. Возможно, вы могли бы попробовать просто добавить (или добавить) свою таблицу стилей по умолчанию и посмотреть, работает ли она.   -  person Rostislav    schedule 07.10.2015
comment
@Rostislav Ну, проблема в следующем: это структура, которая переопределяет мой стиль (в setupUi), поэтому я не могу это контролировать. Если бы мой CSS был установлен после, Qt применил тот, что установлен в Qt Creator, тогда это могло бы сработать.   -  person user4520    schedule 08.10.2015
comment
угробить создателя Qt. Это костыль.   -  person Nicolas Holthaus    schedule 08.10.2015
comment
Можем ли мы увидеть простой пример вашего кода? обычно вызов setStyleSheet или внесение любых изменений стиля после завершения setupUi не должно вызывать проблем. Кроме того, не отказывайтесь от Qt Creator.   -  person MildWolfie    schedule 08.10.2015
comment
@MildWolfie Не планирую, на самом деле мне это очень нравится, и я не вижу причин не использовать его дизайнер при кодировании своего пользовательского интерфейса. В любом случае, setupUi отвечает, среди прочего, за применение таблицы стилей, установленной в Qt Creator. Если после этого я вызову setStylesheet, он перезапишет все предыдущие стили, если только я не объединю их следующим образом: setStyleSheet(styleSheet().append(newStyleSheet));. Однако функция setupUi выполняется после моих вызовов setStylesheet, так что это бесполезно.   -  person user4520    schedule 11.10.2015
comment
@szczurcio У вас есть особая причина, по которой setupUi не может быть первым вызовом функции в вашем конструкторе? Я лично никогда не сталкивался с причиной, по которой конструктор не должен выполняться первым.   -  person MildWolfie    schedule 12.10.2015