我正在使用Qt,但遇到了问题。
我想在QTableWidget
上按下并释放鼠标时注册。只有按下的信号,没有释放的信号。因此,我改用mousePressEvent
和mouseReleaseEvent
。
MyWidget.h
protected:
void mousePressEvent(QMouseEvent * event);
void mouseReleaseEvent(QMouseEvent * event);
我的小部件.cpp
void MyWidget::mousePressEvent(QMouseEvent *event)
{
qDebug() << "Pressed";
}
void MyWidget::mouseReleaseEvent(QMouseEvent *event)
{
qDebug() << "Released";
}
当鼠标左、右或中键在桌子上释放时,它会打印"已发布"。但是,仅当按下右键或中间按钮时,它才会打印"按下"。
可能出了什么问题?按下左键时如何注册?
单元格小部件可能消耗了鼠标左键上的mousePressEvent
,因此您(父小部件)没有收到它。
在QMouseEvent
的文献中,说:
鼠标事件包含一个特殊的接受标志,该标志指示接收方是否需要该事件。如果鼠标事件不是由您的小部件处理的,您应该调用 ignore()。鼠标事件沿父小部件链向上传播,直到小部件使用 accept() 接受它,或者事件过滤器使用它。
正因为如此,我们可以假设你提到的事件可能被其他一些参与者消费了。
这将有助于了解谁是这些演员。
我找到了解决方案(在其他答案的帮助下):
使用事件的小部件顶部有一个 QFrame。我没有想到这一点,因为它适用于其他按钮。它通过以下方式解决:
ui->frame->setAttribute(Qt::WA_TransparentForMouseEvents, true);