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.
1 menjawab
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.
void QWidget::mousePressEvent(QMouseEvent * event)