在信号槽中传递QMouseEvent

时间:2013-09-26 10:12:50

标签: qt

我正在尝试通过信号发送QMouseEvent,当我执行此

void mouseReleaseEvent(QMouseEvent* event)
{
    emit mouseEvent(event);
}

关于调试我发现事件是正确的。 但是在插槽中接收它时,事件中的某些值是错误的。就像event-> button()是错误的而且event-> globalX()是对的,但是event-> x()是错误的。 我不明白为什么在通过插槽时事件会发生变化。

1 个答案:

答案 0 :(得分:4)

我不会以上述方式这样做。正如您可能已经注意到的那样,QMouseEvent指针指向非常量对象,因此没有任何内容可以保证它不会发生变化。很可能event对象在传播到父对象期间被修改,因此您不应该依赖它。而是使用QMouseEvent属性来传递,例如位置等:

void mouseReleaseEvent(QMouseEvent* event)
{
    emit mouseEventCaught(event->pos());
}