Qt - QLabel 上的鼠标事件
Qt - mouse events on a 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
,我用它来显示视频帧,而不是整个 window。
ui->labelKalibracja->installEventFilter(this);
应该可以,但没有,但是
qApp->->installEventFilter(this);
将使整个 window 成为鼠标轨迹区域。
您应该检查事件过滤器的对象:
if (qobject_cast<QLabel*>(obj)==ui->labelKalibracja && event->type() == QEvent::MouseMove)
{
...
}
现在您可以确定事件是针对标签的。请注意,事件过滤器可以安装在多个对象上,您有责任识别对象和事件的组合。
我在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
,我用它来显示视频帧,而不是整个 window。
ui->labelKalibracja->installEventFilter(this);
应该可以,但没有,但是
qApp->->installEventFilter(this);
将使整个 window 成为鼠标轨迹区域。
您应该检查事件过滤器的对象:
if (qobject_cast<QLabel*>(obj)==ui->labelKalibracja && event->type() == QEvent::MouseMove)
{
...
}
现在您可以确定事件是针对标签的。请注意,事件过滤器可以安装在多个对象上,您有责任识别对象和事件的组合。