Таблица стилей в классе, которая наследуется от QAbstractButton - PullRequest
0 голосов
/ 30 марта 2019

Я создал класс, который наследуется от QAbstractButton, и таблицы стилей не работают в этом классе. Как я могу использовать таблицы стилей в классе, которые наследуются от QAbstractButton?

MyButton::MyButton(QWidget *parent):
    QAbstractButton(parent)
{
    setGeometry(0, 0, 100, 50);
    setText(tr("My button"));
    setStyleSheet("QAbstractButton:hover{background-color:blue}");
}

void MyButton::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.fillRect(rect(), QColor("black"));
    painter.fillRect(rect().x() + 2, rect().y() + 2,
                     rect().width() - 4, rect().height() - 4,
                     QColor("red"));
    painter.drawText(rect(), Qt::AlignCenter, text());
}

1 Ответ

1 голос
/ 30 марта 2019

Привет и добро пожаловать сюда на SO!

После того, как вы переопределите метод paintEvent, вы берете на себя полную ответственность за то, как будет отображаться виджет.Таким образом, таблица стилей не будет работать, так как используемый в вашем приложении QStyle не будет задействован.

Если вам просто нужна кнопка, которая меняет цвет всякий раз, когда мышь над ним, вам не нужно извлекать QAbstractButtonкласс вообще.Просто используйте стандартный QPushButton и стилизуйте его соответствующим образом.

В противном случае, если вы хотите полностью контролировать ситуацию и рисовать все самостоятельно, вы можете легко реализовать эффект наведения при помощи enterEvent () и функции leftEvent () .Просто добавьте логическое значение в ваш класс (т.е. isHover) и напишите что-то вроде этого:

MyButton::MyButton(QWidget *parent):
    QAbstractButton(parent)
{
    isHover = false;
    setGeometry(0, 0, 100, 50);
    setText(tr("My button"));
}

void MyButton::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.fillRect(rect(), (isHover ? Qt::blue : Qt::red));
    painter.fillRect(rect().x() + 2, rect().y() + 2,
                     rect().width() - 4, rect().height() - 4,
                     QColor("red"));
    painter.drawText(rect(), Qt::AlignCenter, text());
}

void MyButton::enterEvent(QEvent *event)
{
    isHover = true;
}

void MyButton::leaveEvent(QEvent *event)
{
    isHover = false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...