-1

I am trying to grab touch events from one widget and simulate it in another widget.The grab and simulate touch events are working fine for mousePressEvent,mouseReleaseEvent.But when I try to simulate mouseMoveEvent the corresponding events are not getting in the the destination side.

void SimulateManager::showWidgets()
{
Source.show();
Destination.show();
connect(&Source, SIGNAL(sigMousePress(QMouseEvent *)), this, 
SLOT(slotMousePress(QMouseEvent *)));
connect(&Source, SIGNAL(sigMouseMove(QMouseEvent *)), this, 
SLOT(slotMouseMove(QMouseEvent *)));
}
void SourceWidget:: mouseMoveEvent(QMouseEvent *event)
{
emit  sigMouseMove(event);
}
void SourceWidget::mousePressEvent(QMouseEvent *event)
{
 emit sigMousePress(event);
}
void SimulateManager:: slotMousePress(QMouseEvent *event)
{

 QPoint pPoint(event->pos().x(),event->pos().y());
 QMouseEvent mouseEvent( (QEvent::MouseButtonPress),pPoint,  Qt::LeftButton, Qt::NoButton,Qt::NoModifier   );
 QCoreApplication::sendEvent(&Destination, &mouseEvent);

}

void SimulateManager:: slotMouseMove(QMouseEvent *event)
{
 QPoint pPoint(event->pos().x(),event->pos().y());
 QMouseEvent mouseEvent( (QEvent::MouseMove),pPoint,  Qt::LeftButton, 
 Qt::NoButton,Qt::NoModifier   );
 QCoreApplication::sendEvent(&Destination, &mouseEvent);

}

void DesitinationWidget:: mouseMoveEvent(QMouseEvent *event)
{
 qDebug()<<Q_FUNC_INFO;
}

void DesitinationWidget::mousePressEvent(QMouseEvent *event)
{
  qDebug()<<Q_FUNC_INFO;
}

The above code is used for grab and simulate. Basically the (QEvent::MouseMove)+ (Qt::LeftButton) is for scrolling a tablewidget. QCoreApplication::sendEvent returns success.Can any one help me with this.

prasanth
  • 19
  • 4

1 Answers1

0

To catch a mouse movement event in Qt, you need to override MouseMoveEvent, but MouseMoveEvent is not too resource-intensive. In the default state, you have to press the mouse to capture it. To move the mouse without pressing it, you need setMouseTracking(true).

For QMainWindow, even if you use setMouseTracking (true), you can't capture the movement that the mouse doesn't press. It can only be captured when the mouse is pressed.

To start mobile monitoring with QMainWindow's CentrolWIdget using setMouseTracking(true). Then turn on monitoring with setMainsTracking(true) of QMainWindow.

郭苏莹
  • 15
  • 3