事件过滤
#include <QListWidget>
class ObjectMouseButtonPressed : public QObject {Q_OBJECT
public:explicit ObjectMouseButtonPressed(QObject *parent = nullptr) : QObject(parent) {}bool eventFilter(QObject *obj, QEvent *event) override {if (event->type() == QEvent::MouseButtonPress) {QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);//qDebug() << "Mouse clicked at:" << mouseEvent->pos();emit itemClickedPos(mouseEvent->pos());//QListWidget *listWidget = qobject_cast<QListWidget*>(obj);//if (listWidget) {// QPoint pos = mouseEvent->pos();// //qDebug() << "Mouse clicked at:" << pos;//// QListWidgetItem *item = listWidget->itemAt(pos);// if (item) {// //QRect itemRect = listWidget->visualRect(item);// //qDebug() << "Item position:" << itemRect.topLeft();// //qDebug() << "Item size:" << itemRect.size();// emit itemClickedPos(pos);// }//}}//myDebugNum(event->type());return QObject::eventFilter(obj, event);}
signals:void itemClickedPos(const QPoint & pos);
};
使用
QLabel *lblPicture = new QLabel(itemWidget);
lblPicture->setAlignment(Qt::AlignCenter);
QPixmap pixmap(pathlist.at(j));
lblPicture->setPixmap(pixmap.scaled(58,58, Qt::KeepAspectRatio, Qt::SmoothTransformation));
lblPicture->setMinimumSize(QSize(60,60));ObjectMouseButtonPressed *monitor = new ObjectMouseButtonPressed;
lblPicture->installEventFilter(monitor);
connect(monitor,&ObjectMouseButtonPressed::itemClickedPos,this, [=] (QPoint pos) mutable {//点击的回调函数
});