Qt mousePressEvent 左键
Qt mousePressEvent left button
我正在使用 Qt,但遇到了 运行 问题。
我想在 QTableWidget
上按下和释放鼠标时进行注册。只有按下的信号,没有释放的信号。因此,我改用 mousePressEvent
和 mouseReleaseEvent
。
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
,因此您(父小部件)没有收到它。
在QMouseEvent
的documentation中表示:
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);
我正在使用 Qt,但遇到了 运行 问题。
我想在 QTableWidget
上按下和释放鼠标时进行注册。只有按下的信号,没有释放的信号。因此,我改用 mousePressEvent
和 mouseReleaseEvent
。
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
,因此您(父小部件)没有收到它。
在QMouseEvent
的documentation中表示:
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);