Установить CSS в конструкторе подкласса QPushButton
Я создаю свой собственный класс кнопок путем создания подклассов QPushButton
, Однако по некоторым причинам установка CSS этого класса в его конструкторе не имеет никакого эффекта; Я должен сделать это, например, в paintEvent
, то все в порядке. Я мог бы просто иметь глобальный .qss
файл и установить его для всего приложения, но я хочу, чтобы класс управлял своими собственными стилями. Почему мой подход не работает?
Код:
custompushbutton.h
class CustomPushButton: public QPushButton
{
Q_OBJECT
public:
explicit CustomPushButton(QWidget *parent = 0);
~CustomPushButton() = default;
};
custompushbutton.cpp
CustomPushButton::CustomPushButton(QWidget *parent)
: QPushButton(parent)
{
setStyleSheet("background-color: black;"); // this does not work
}
РЕДАКТИРОВАТЬ: Для будущих читателей, если у вас возникла похожая проблема (т.е. Qt, кажется, игнорирует ваш CSS, который вы установили в коде), посмотрите, не отредактировали ли вы объект styleSheet
свойство в Qt Creator - прокрутите вниз в списке свойств и убедитесь, что styleSheet
пусто и не жирно - это была проблема в моем случае. Если оно выделено жирным шрифтом, это означает, что Qt все еще использует это пустое поле в качестве CSS объекта, тем самым переопределяя ваши стили. Чтобы очистить его, нажмите маленькую стрелку рядом с полем в Qt Creator или откройте файл.ui и удалите <styleSheet>
Свойство XML.
Спасибо JMik за указание в правильном направлении.
1 ответ
Затраты на производительность установки таблицы стилей удивительно высоки, особенно если вы разрабатываете для встраиваемой системы.
Я бы предложил, как вы сказали, использовать глобальную таблицу стилей и указать имя класса, например:
CustomPushButton { background-color: black; }
таким образом все CustomPushButton
будет иметь тот же стиль, и создание объекта займет меньше времени.
Что касается причины, по которой это не работает в вашем случае, я думаю, может быть, вы случайно изменили таблицу стилей снова после создания CustomPushButton.
Я проверил ваш код на моей стороне, и он сработал, так что, вероятно, это как-то связано с кодом, который вы не видите