问题如下:我想重新定义(摆脱按钮的悬停效果)默认的Qt按钮样式的行为。我只需要1和3,如下图所示。当按钮聚焦时,第二个外观就出现了。
悬停效果:悬停按钮时出现;按下按钮并将光标移动到按钮空间之外时仍然会被绘制。
我尝试了什么:
重新定义事件:
How do I implement QHoverEvent in Qt?
在这里,我只是重新定义了一些事件,如Move,Hover等,并使它们无法正常运行。
示例代码:
class TestButton : public QToolButton
{
Q_OBJECT
public:
TestButton (QWidget *parent = 0) :
QToolButton(parent)
{}
bool event(QEvent * e)
{
this->clearFocus();
this->clearMask();
switch (e->type())
{
case QEvent::GraphicsSceneHoverEnter:
case QEvent::GraphicsSceneHoverLeave:
case QEvent::GraphicsSceneHoverMove:
case QEvent::HoverEnter:
case QEvent::HoverLeave:
case QEvent::HoverMove:
return true;
default:
return QWidget::event(e);
}
}
};
一些小黑客:
btn->setFocusPolicy(Qt::NoFocus);
答案 0 :(得分:1)
如果您只接受HoverEnter
个事件,那么在释放按钮后,只要您将鼠标移开,鼠标悬停效果就会消失。因此,您需要通过发送相应的事件来假装移动鼠标。
bool event(QEvent * e)
{
switch (e->type()) {
case QEvent::HoverEnter:
return true;
case QEvent::MouseButtonRelease: {
QEvent event(QEvent::Leave);
QApplication::sendEvent(this, &event);
}
default:
return QWidget::event(e);
}
}