Установить 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.

Я проверил ваш код на моей стороне, и он сработал, так что, вероятно, это как-то связано с кодом, который вы не видите

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