问题描述
- 1.mouseMoveEvent无法捕获鼠标的实时状态,只有在点击左键后才能响应。
解决方法
- 1.实现mouseMoveEvent的实时响应,则需要在构造函数中添加setMouseTrack(true),直接得到监听事件。若是setMouseTrack(false),只有鼠标按下才会有mouseMove监听事件响应。但是如果有多个窗口的话需要对每个窗口进行设置setMouseTrack(true)。
- 2.可以使用setAttribute( Qt::WA_Hover,true)实现对鼠标的实时监控,将其放在构造函数中,相对于setMouseTracking(true)来说,它可以弥补鼠标事件被子窗体获取的问题。
示例
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);
setAttribute(Qt::WA_TranslucentBackground);
setAutoFillBackground(true);
setAttribute( Qt::WA_Hover,true);
}
bool QWidget::event(QEvent *event)
{
if(event->type() == QEvent::HoverEnter ||event->type() == QEvent::HoverLeave||event->type() == QEvent::HoverMove )
{
setCursor(Qt::SizeHorCursor);
}
return QWidget::event(event);
}