Saya memiliki potongan kode uji ini di 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;
}

Saya hanya ingin mendapatkan posisi mouse ketika diklik, dan mengirim koordinat ke utas lain dengan loop OpenCV yang akan menarik informasi HSV dan melakukan hal-hal yang sesuai. Saya menggunakan mouse hanya untuk pengujian.

Masalahnya adalah saya tidak tahu cara melampirkan ini (melacak, mengklik) ke QLabel labelKalibracja, yang saya gunakan untuk menampilkan bingkai video, alih-alih seluruh jendela.

ui->labelKalibracja->installEventFilter(this);

Seharusnya bekerja, tapi tidak, tapi

qApp->->installEventFilter(this);

Akan membuat seluruh jendela menjadi zona trek mouse.

2
Petersaber 26 Mei 2015, 15:43
2
Untuk pelacakan Anda harus mengatur setMouseTracking(true) juga saya pikir.
 – 
fassl
26 Mei 2015, 16:00
Saya akan mencoba subklasifikasi dari QLabel, dan melampirkan sinyal ke void QWidget::mousePressEvent(QMouseEvent * event)
 – 
user3528438
26 Mei 2015, 16:39

1 menjawab

Jawaban Terbaik

Anda harus memeriksa objek filter acara :

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

Sekarang Anda dapat memastikan bahwa acara tersebut untuk label. Perhatikan bahwa filter peristiwa dapat diinstal pada beberapa objek dan tugas Anda adalah mengidentifikasi kombinasi objek dan peristiwa.

2
Nejat 26 Mei 2015, 15:55
Besar! Tidak hanya ini berfungsi, tetapi juga koordinatnya tidak relatif terhadap seluruh jendela, hanya labelnya, yang tidak saya sadari akan terjadi. Terima kasih atas jawaban ini.
 – 
Petersaber
27 Mei 2015, 09:18