默認QT的QListWidget不支持監聽鼠標移動事件,需要新建一個子類,繼承QListWidget, 當鼠標移動的時候,發送鼠標移動事件到父窗體:
子類頭文件 listwidget.h:
#ifndef LISTWIDGET_H #define LISTWIDGET_H #include <QWidget> #include <QListWidget> class ListWidget : public QListWidget { Q_OBJECT public: explicit ListWidget(QWidget *parent = nullptr); virtual void mouseMoveEvent(QMouseEvent *event); private: QWidget *parent = nullptr; signals: }; #endif // LISTWIDGET_H
子類實現文件listwidget.cpp:
#include "listwidget.h" #include <QDebug> #include <QApplication> #include <QEvent> #include <QMouseEvent> ListWidget::ListWidget(QWidget *parent) : QListWidget(parent) { this->parent = parent; } void ListWidget::mouseMoveEvent(QMouseEvent *event) { qDebug() << "move..."; // 發送移動事件到父窗體 QApplication::sendEvent(parent, event); }
保證QListWidget和上層所有父窗口,開啟了鼠標跟蹤:
xxWidget->setMouseTracking(true);
創建好類后,打開窗體設計,右鍵目標QListWidget控件 -> 提升 -> 提升類名稱為ListWidget -> 提升:

這樣,父窗體的mouseMoveEvent就可以監聽到QListWidget事件了。
