我创建了从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());
}
答案 0 :(得分:1)
嗨,欢迎来到这里!
一旦重写paintEvent方法,您将对小部件的绘制方式承担全部责任。因此,样式表将不起作用,因为不会涉及您的应用程序使用的QStyle。
如果只需要一个在鼠标悬停于其上时会改变颜色的按钮,则根本不需要派生QAbstractButton类。只需使用标准的QPushButton并相应地设置其样式即可。
否则,如果要完全控制并自己绘画,可以使用 enterEvent()和 leaveEvent()轻松实现悬停效果功能。只需在您的课程中添加一个布尔值(即“ 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;
}