Qt mousePressEvent左键

时间:2016-02-20 09:05:28

标签: qt mouseevent qtwidgets

我正在使用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";
}

它打印&#34;发布&#34;当鼠标左键,右键或中键在桌面上释放时。然而,它打印&#34;压制&#34;仅当按下右或中间按钮时。

可能有什么不对?如何在按下左键时注册?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

在小部件顶部有一个消耗该事件的QFrame。我没想到,因为它适用于其他按钮。它解决了:

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

答案 2 :(得分:0)

QMouseEvent的{​​{3}}中,据说:

  

鼠标事件包含一个特殊的接受标志,指示接收者是否想要该事件。如果窗口小部件未处理鼠标事件,则应调用ignore()。鼠标事件在父窗口小部件链中向上传播,直到窗口小部件使用accept()接受它,或者事件过滤器使用它。

正因为如此,我们可以假设你提到的事件可能被其他一些演员所消耗。

这将有助于了解这些演员是谁。