QT MouseMove Simulation в QWidget не работает - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь получить события касания из одного виджета и смоделировать его в другом виджете. События захвата и имитации касания работают нормально для mousePressEvent, mouseReleaseEvent. Но когда я пытаюсь смоделировать mouseMoveEvent, соответствующие события не попадают всторона назначения.

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;
}

Приведенный выше код используется для захвата и симуляции.В основном (QEvent :: MouseMove) + (Qt :: LeftButton) предназначен для прокрутки табличного виджета.QCoreApplication :: sendEvent возвращает success.Can любой может помочь мне с этим.

1 Ответ

0 голосов
/ 18 марта 2019

Чтобы перехватить событие перемещения мыши в Qt, вам нужно переопределить MouseMoveEvent, но MouseMoveEvent не слишком ресурсоемкий. В состоянии по умолчанию вы должны нажать мышку, чтобы захватить его. Чтобы переместить мышь, не нажимая ее, вам нужно установить setMouseTracking (true).

Для QMainWindow, даже если вы используете setMouseTracking (true), вы не можете зафиксировать движение, которое не нажимает мышь. Он может быть захвачен только при нажатии мыши.

Чтобы запустить мобильный мониторинг с помощью CentrolWIdget в QMainWindow, используя setMouseTracking (true). Затем включите мониторинг с помощью setMainsTracking (true) QMainWindow.

...