qt qlabel 添加点击事件(事件过滤)

事件过滤

#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 {
    //点击的回调函数
});
posted @ 2025-09-01 16:13  小城熊儿  阅读(12)  评论(0)    收藏  举报