mouseMoveEvent事件無法響應滑鼠move事件
阿新 • • 發佈:2020-12-23
問題描述
- 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);
}