Привет и добро пожаловать сюда на 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;
}