我正在尝试从一个窗口小部件捕获触摸事件,并在另一个窗口小部件中对其进行仿真。捕获和模拟触摸事件对于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)用于滚动tablewidget。 QCoreApplication :: sendEvent返回成功。有人可以帮我吗?
答案 0 :(得分:0)
要在Qt中捕获鼠标移动事件,您需要重写MouseMoveEvent,但是MouseMoveEvent不会占用太多资源。在默认状态下,您必须按鼠标才能捕获它。要移动鼠标而不按下鼠标,您需要setMouseTracking(true)。
对于QMainWindow,即使使用setMouseTracking(true),也无法捕获鼠标未按下的动作。只能在按下鼠标时捕获它。
使用setMouseTracking(true)从QMainWindow的CentrolWIdget开始移动监视。然后使用QMainWindow的setMainsTracking(true)打开监视。