Qt mousePressEvent 左键

Qt mousePressEvent left button

我正在使用 Qt,但遇到了 运行 问题。

我想在 QTableWidget 上按下和释放鼠标时进行注册。只有按下的信号,没有释放的信号。因此,我改用 mousePressEventmouseReleaseEvent

MyWidget.h

protected:
    void mousePressEvent(QMouseEvent * event);
    void mouseReleaseEvent(QMouseEvent * event);

MyWidget.cpp

void MyWidget::mousePressEvent(QMouseEvent *event)
{
    qDebug() << "Pressed";
}

void MyWidget::mouseReleaseEvent(QMouseEvent *event)
{
    qDebug() << "Released";
}

当在 table 上释放鼠标左键、右键或中键时,它会打印 "Released"。但是,它仅在按下右侧或中间按钮时打印 "Pressed"。

有什么问题吗?如何在按下左键时注册?

单元格小部件可能会消耗鼠标左键上的 mousePressEvent,因此您(父小部件)没有收到它。

QMouseEventdocumentation中表示:

A mouse event contains a special accept flag that indicates whether the receiver wants the event. You should call ignore() if the mouse event is not handled by your widget. A mouse event is propagated up the parent widget chain until a widget accepts it with accept(), or an event filter consumes it.

因此,我们可以假设您提到的事件可能被其他一些参与者消费了。

了解这些演员是谁会有所帮助。

我找到了解决方案(在其他答案的帮助下):

在使用该事件的小部件顶部有一个 QFrame。我没有想到这一点,因为它适用于其他按钮。解决方法:

ui->frame->setAttribute(Qt::WA_TransparentForMouseEvents, true);