不要在悬停时突出显示 Qt 按钮
Do not highlight a Qt button on hover
我想让 QPushButton
看起来完全一样,无论鼠标当前是否悬停在它上面,或者如果不可能,使按钮的背景颜色不变悬停时不会改变。到目前为止我已经尝试过了,
QPushButton::hover { background-color: palette(button); }
palette()
似乎也没有其他选项可以满足我的要求。
我可以建议 - 不要尝试覆盖 hover
的默认样式表 - 安装一个 eventFilter
来过滤掉所有 QEvent::HoverEnter
。例如,在某处添加这样一个微小的class:
class ButtonEventFilter : public QObject
{
Q_OBJECT
protected:
bool eventFilter(QObject *obj, QEvent *event) override
{
Q_UNUSED(obj)
if (event->type() == QEvent::HoverEnter)
{
return true;
}
return false;
}
};
然后将此过滤器安装为:
ui->pushButton->installEventFilter(new ButtonEventFilter);
然后,将不会有 hover
事件,因此您的 QPushButton
将保持不变。
===================
如果您正在使用 Python:
class ButtonEventFilter(QObject):
def eventFilter(self, obj, event):
if event.type() == QEvent.HoverEnter:
return True
return False
然后安装过滤器:
filter = ButtonEventFilter(self)
self.ui.pushButton.installEventFilter(filter)
记得导入 QObject
和 QEvent
。如果您使用的是 PySide 2:
from PySide2.QtCore import QObject, QEvent
我想让 QPushButton
看起来完全一样,无论鼠标当前是否悬停在它上面,或者如果不可能,使按钮的背景颜色不变悬停时不会改变。到目前为止我已经尝试过了,
QPushButton::hover { background-color: palette(button); }
palette()
似乎也没有其他选项可以满足我的要求。
我可以建议 - 不要尝试覆盖 hover
的默认样式表 - 安装一个 eventFilter
来过滤掉所有 QEvent::HoverEnter
。例如,在某处添加这样一个微小的class:
class ButtonEventFilter : public QObject
{
Q_OBJECT
protected:
bool eventFilter(QObject *obj, QEvent *event) override
{
Q_UNUSED(obj)
if (event->type() == QEvent::HoverEnter)
{
return true;
}
return false;
}
};
然后将此过滤器安装为:
ui->pushButton->installEventFilter(new ButtonEventFilter);
然后,将不会有 hover
事件,因此您的 QPushButton
将保持不变。
===================
如果您正在使用 Python:
class ButtonEventFilter(QObject):
def eventFilter(self, obj, event):
if event.type() == QEvent.HoverEnter:
return True
return False
然后安装过滤器:
filter = ButtonEventFilter(self)
self.ui.pushButton.installEventFilter(filter)
记得导入 QObject
和 QEvent
。如果您使用的是 PySide 2:
from PySide2.QtCore import QObject, QEvent