Qt 在信号插槽中传递QMouseEvent

Qt 在信号插槽中传递QMouseEvent,qt,Qt,在执行此操作时,我试图通过信号发送QMouseEvent void mouseReleaseEvent(QMouseEvent* event) { emit mouseEvent(event); } 调试时,我发现事件是正确的。 但在插槽中接收到它时,事件中的某些值是错误的。比如event->button()是错误的,event->globalX()是正确的,但是event->x()是错误的。 我不明白为什么通过插槽时事件会发生变化。我不会以上述方式进行更改。您可能已经注意到,QMou

在执行此操作时,我试图通过信号发送QMouseEvent

void mouseReleaseEvent(QMouseEvent* event)
{
    emit mouseEvent(event);
}
调试时,我发现事件是正确的。 但在插槽中接收到它时,事件中的某些值是错误的。比如event->button()是错误的,event->globalX()是正确的,但是event->x()是错误的。
我不明白为什么通过插槽时事件会发生变化。

我不会以上述方式进行更改。您可能已经注意到,
QMouseEvent
指针指向非常量对象,因此没有任何东西可以保证它不会更改。最有可能的是
事件
对象在传播到父对象的过程中被修改,因此您不应该依赖它。而是使用
QMouseEvent
属性传递,例如位置等:

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

我不会用上面提到的方式做那件事。您可能已经注意到,
QMouseEvent
指针指向非常量对象,因此没有任何东西可以保证它不会更改。最有可能的是
事件
对象在传播到父对象的过程中被修改,因此您不应该依赖它。而是使用
QMouseEvent
属性传递,例如位置等:

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

是的,但我需要传递enum-QEvent::Type和Qt::MouseButton,它们没有注册为QMetaType,QMouseEvent也不能在信号和插槽中传递。值得注意的是,它在globalPos中总是传递正确的坐标,但在pos中总是(-1,-2),在button中总是有一些随机值。它是一致的。为什么不将枚举作为整数传递?将信号声明为
mouseEventCaught(int,int)
并将其作为
mouseEventCaught(event->type(),event->button())
发出。是的,但我需要传递enums-QEvent::type和Qt::MouseButton,它们没有注册为QMetaType,QMouseEvent也不能在信号和插槽中传递。值得注意的是,它在globalPos中总是传递正确的坐标,但在pos中总是(-1,-2),在button中总是有一些随机值。它是一致的。为什么不将枚举作为整数传递?将信号声明为
mouseEventCaught(int,int)
并将其作为
mouseEventCaught(event->type(),event->button())
发出。