默认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事件了。