Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt-QLabel上的鼠标事件_C++_Qt_Events_Qlabel - Fatal编程技术网

C++ Qt-QLabel上的鼠标事件

C++ Qt-QLabel上的鼠标事件,c++,qt,events,qlabel,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

我在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;
}
应该能工作,但不能,但是

qApp->->installEventFilter(this);

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

您应该检查事件筛选器的对象:

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

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

对于跟踪,我认为您也必须设置setMouseTracking(true)。我会尝试从QLabel进行子分类,并将一个信号附加到它的
void QWidget::mousePressEvent(QMouseEvent*事件)
太棒了!不仅如此,坐标也不是相对于整个窗口的,只是相对于标签,我没有意识到这会发生。谢谢你的回答。
if (qobject_cast<QLabel*>(obj)==ui->labelKalibracja && event->type() == QEvent::MouseMove)
{
   ...
}