gpt4 book ai didi

c++ - 以编程方式在任何按钮上应用 Qt 鼠标悬停按钮突出显示

转载 作者:搜寻专家 更新时间:2023-10-31 02:05:29 24 4
gpt4 key购买 nike

在 Windows 上的 Qt 应用程序中,当鼠标光标悬停在 QPushButton 上时,它将以闪烁的轮廓突出显示。

我想以编程方式告诉任何 QPushButton 像那样突出显示,而不需要鼠标光标实际悬停在它上面。

这可能吗?我试过将焦点设置到按钮并使用不同的样式表,但我似乎无法访问鼠标悬停轮廓效果。

最佳答案

解决方案

如果你想模拟一个按钮一直在鼠标下方,我的解决方案是继承QPushButton 并重新实现paintEvent 方法,显式设置状态QStyle::State_MouseOver 的按钮:

option.state |= QStyle::State_MouseOver;

注意:请注意,此解决方案在不同的操作系统上会产生不同的效果,因为它们使用不同的方式来指示悬停按钮。例如,在 Windows 7 下,整个按钮将突出显示,而不是添加发光边框。


背景

QPushButtonQStylePainter 绘制,如 source code 中所示:

void QPushButton::paintEvent(QPaintEvent *)
{
QStylePainter p(this);
QStyleOptionButton option;
initStyleOption(&option);
p.drawControl(QStyle::CE_PushButton, option);
}

按钮的绘制方式由 QStyleOptionButton 中的设置决定。 ,它是 QStyleOption 的子类. QStyleOption 反过来有一个公共(public)的 state 属性,它包含 state flags绘制按钮时使用的。标志 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);
}

...

示例的完整代码可以从GitHub 下载。 .

关于c++ - 以编程方式在任何按钮上应用 Qt 鼠标悬停按钮突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51963222/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com