我正在使用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";
}
它打印&#34;发布&#34;当鼠标左键,右键或中键在桌面上释放时。然而,它打印&#34;压制&#34;仅当按下右或中间按钮时。
可能有什么不对?如何在按下左键时注册?
答案 0 :(得分:1)
单元格小部件可能会消耗鼠标左键上的mousePressEvent
,因此您(父小部件)没有接收到它。
答案 1 :(得分:1)
我找到了解决方案(在其他答案的帮助下):
在小部件顶部有一个消耗该事件的QFrame。我没想到,因为它适用于其他按钮。它解决了:
ui->frame->setAttribute(Qt::WA_TransparentForMouseEvents, true);
答案 2 :(得分:0)
在QMouseEvent
的{{3}}中,据说:
鼠标事件包含一个特殊的接受标志,指示接收者是否想要该事件。如果窗口小部件未处理鼠标事件,则应调用ignore()。鼠标事件在父窗口小部件链中向上传播,直到窗口小部件使用accept()接受它,或者事件过滤器使用它。
正因为如此,我们可以假设你提到的事件可能被其他一些演员所消耗。
这将有助于了解这些演员是谁。