【问题标题】:QT MouseMove Simulation in QWidget not workingQWidget中的QT MouseMove模拟不起作用
【发布时间】:2019-03-18 08:56:42
【问题描述】:

我正在尝试从一个小部件中抓取触摸事件并在另一个小部件中对其进行模拟。对于 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 返回成功。谁能帮我解决这个问题。

【问题讨论】:

    标签: qt qmouseevent


    【解决方案1】:

    要在 Qt 中捕获鼠标移动事件,您需要重写 MouseMoveEvent,但 MouseMoveEvent 不会占用太多资源。在默认状态下,你必须按下鼠标来捕捉它。要在不按下鼠标的情况下移动鼠标,您需要 setMouseTracking(true)。

    对于QMainWindow,即使使用setMouseTracking(true),也无法捕捉到鼠标未按下的动作。只能在鼠标按下时捕获。

    使用 setMouseTracking(true) 使用 QMainWindow 的 CentrolWIdget 启动移动监控。然后用QMainWindow的setMainsTracking(true)开启监控。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 2016-11-09
      相关资源
      最近更新 更多