Qt - QLabel

时间:2015-05-26 12:43:16

标签: c++ qt events qlabel

我在mainwindow.cpp中有这段测试代码:

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
  if (event->type() == QEvent::MouseMove)
  {
    QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
    qDebug() << QString("Mouse move (%1,%2)").arg(mouseEvent->pos().x()).arg(mouseEvent->pos().y());
  }
  return false;
}

我只想在点击时获得鼠标位置,并将坐标发送到另一个具有OpenCV循环的线程,该循环将拉取HSV信息并相应地执行操作。我正在使用鼠标进行测试。

问题在于我不知道如何将此(跟踪,点击)附加到QLabel labelKalibracja,我用它来显示视频帧,而不是整个窗口。

ui->labelKalibracja->installEventFilter(this);

应该有效,但不是,但是

qApp->->installEventFilter(this);

将使整个窗口成为鼠标轨道区域。

1 个答案:

答案 0 :(得分:2)

您应该检查事件过滤器的对象:

if (qobject_cast<QLabel*>(obj)==ui->labelKalibracja && event->type() == QEvent::MouseMove)
{
   ...
}

现在您可以确保该事件是针对标签的。请注意,事件过滤器可以安装在多个对象上,您有责任识别对象和事件的组合。