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 {
//点击的回调函数
});

浙公网安备 33010602011771号