1

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

我想在鼠标在QTableWidget. 只有按下的信号,没有释放的信号。因此我使用mousePressEventandmouseReleaseEvent代替。

我的小部件.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";
}

当鼠标左键、右键或中键在桌子上释放时,它会打印“已释放”。但是,它仅在按下右键或中间按钮时打印“Pressed”。

有什么问题?按下左键时如何注册?

4

3 回答 3

1

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

于 2016-02-20T09:23:35.333 回答
1

在 的文档QMouseEvent,据说:

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

因此,我们可以假设您提到的事件可能被其他一些参与者消费了。

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

于 2016-02-20T09:31:30.537 回答
1

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

在使用该事件的小部件顶部有一个 QFrame。我没有想到这一点,因为它适用于其他按钮。它通过以下方式解决:

ui->frame->setAttribute(Qt::WA_TransparentForMouseEvents, true);
于 2016-02-20T13:17:22.903 回答