在Windows的Qt应用程序中,当鼠标指针悬停在QPushButton上时,它将以闪烁的轮廓突出显示。
我想以编程方式告诉任何QPushButton突出显示的内容,而无需将鼠标光标悬停在上面。
这可能吗?我尝试将焦点设置为按钮并使用了不同的样式表,但是似乎无法访问鼠标悬停的轮廓效果。
答案 0 :(得分:2)
如果要模拟,一个按钮一直在鼠标的下面,我的解决方案是从 QPushButton 继承并重新实现paintEvent
方法,显式设置按钮的状态到QStyle::State_MouseOver
:
option.state |= QStyle::State_MouseOver;
注意:请注意,此解决方案将对不同的操作系统产生不同的影响,因为它们使用不同的方式来指示悬停的按钮。例如,在Windows 7下,整个按钮将突出显示,而不是添加发光的边框。
QPushButton 由 QStylePainter 绘制,如source code所示:
void QPushButton::paintEvent(QPaintEvent *)
{
QStylePainter p(this);
QStyleOptionButton option;
initStyleOption(&option);
p.drawControl(QStyle::CE_PushButton, option);
}
按钮的绘制方式由QStyleOptionButton中的设置决定,QStyleOption是state flags的子类。 QStyleOption依次具有公共state
属性,该属性保存绘制按钮时使用的GitHub。标志QStyle::State_MouseOver
用于指示按钮在鼠标下方。
最后,这是您可以尝试的示例:
在 GlowyButton.cpp 中:
#include "GlowyButton.h"
#include <QStylePainter>
#include <QStyleOptionButton>
...
void GlowyButton::paintEvent(QPaintEvent * /*event*/)
{
QStylePainter p(this);
QStyleOptionButton option;
initStyleOption(&option);
option.state |= QStyle::State_MouseOver;
p.drawControl(QStyle::CE_PushButton, option);
}
...