http://qt-project.org/doc/qt-5/qwidget.html#enterEvent http://qt-project.org/doc/qt-5/qwidget.html#enterEvent
http://qt-project.org/doc/qt-5/qwidget.html#leaveEvent http://qt-project.org/doc/qt-5/qwidget.html#leaveEvent
http://qt-project.org/doc/qt-5/qt.html#widget-attributes http://qt-project.org/doc/qt-5/qt.html#widget-attributes
Qt::WA_悬停
当鼠标进入或离开时强制 Qt 生成绘制事件
小部件。此功能通常在实现自定义时使用
风格;有关详细信息,请参阅样式示例。
http://qt-project.org/doc/qt-5/qtwidgets-widgets-styles-example.html#norwegianwoodstyle-class-implementation http://qt-project.org/doc/qt-5/qtwidgets-widgets-styles-example.html#norwegianwoodstyle-class-implementation
This QStyle::polish()
每个绘制的小部件都会调用一次重载
使用样式。我们重新实现它来设置Qt::WA_Hover
属性
在QPushButtons
and QComboBoxes
。设置该属性后,Qt
当鼠标指针进入或离开时生成绘制事件
小部件。这使得渲染按钮和组合框成为可能
当鼠标指针位于它们上方时,情况会有所不同。
如何接收进入和离开事件QWidget
-
设置 WA_Hover 的小部件属性
// in your widget's constructor (probably)
this->setAttribute(Qt::WA_HOVER, true);
-
实施QWidget::enterEvent()
and QWidget::leaveEvent()
.
void Widget::enterEvent(QEvent * event)
{
qDebug() << Q_FUNC_INFO << this->objectName();
QWidget::enterEvent(event);
}
void Widget::leaveEvent(QEvent * event)
{
qDebug() << Q_FUNC_INFO << this->objectName();
QWidget::leaveEvent(event);
}
Done
QWidget 中的 QHoverEvent
http://qt-project.org/doc/qt-5/qhoverevent.html#details http://qt-project.org/doc/qt-5/qhoverevent.html#details
http://qt-project.org/doc/qt-5/qobject.html#event http://qt-project.org/doc/qt-5/qobject.html#event
http://qt-project.org/doc/qt-5/qwidget.html#event http://qt-project.org/doc/qt-5/qwidget.html#event
// in your widget's constructor (probably)
this->setAttribute(Qt::WA_HOVER, true);
// ...
void Widget::hoverEnter(QHoverEvent * event) {qDebug() << Q_FUNC_INFO << this->objectName();}
void Widget::hoverLeave(QHoverEvent * event) {qDebug() << Q_FUNC_INFO << this->objectName();}
void Widget::hoverMove(QHoverEvent * event) {qDebug() << Q_FUNC_INFO << this->objectName();}
bool Widget::event(QEvent * e)
{
switch(e->type())
{
case QEvent::HoverEnter:
hoverEnter(static_cast<QHoverEvent*>(e));
return true;
break;
case QEvent::HoverLeave:
hoverLeave(static_cast<QHoverEvent*>(e));
return true;
break;
case QEvent::HoverMove:
hoverMove(static_cast<QHoverEvent*>(e));
return true;
break;
default:
break;
}
return QWidget::event(e);
}
UPDATE:
简单的例子
将鼠标悬停在按钮上即可看到计数变化。查看应用程序输出以获取更多信息。
https://gist.github.com/peteristhegreat/d6564cd0992351f98aa94f869be36f77 https://gist.github.com/peteristhegreat/d6564cd0992351f98aa94f869be36f77
希望有帮助。