Qt 鼠标按事件左键



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

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

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);

相关内容

  • 没有找到相关文章

最新更新