Убедитесь, что вы правильно устанавливаете фильтр событий . Кроме того, если вы хотите отследить положение мыши, вы должны включить mouseTracking
, в противном случае события перемещения не будут вызваны (хотя QEvent::Enter
и QEvent::Leave
будут, то есть , который указывает, что мышь вошла или покинула виджет).
Вот минимальный пример того, как это сделать:
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
m_label = new QLabel("Hello world!");
m_label->setObjectName("m_label");
m_label->installEventFilter(this);
m_label->setMouseTracking(true);
auto hlayout = new QVBoxLayout();
hlayout->addWidget(m_label);
setLayout(hlayout);
}
bool MyWidget::eventFilter(QObject* sender, QEvent* event)
{
if (sender == m_label) {
qDebug() << sender->objectName() << event->type();
if (event->type() == QEvent::Enter) {
qDebug() << "mouse on label name";
} else if (event->type() == QEvent::Leave) {
qDebug() << "mouse not on label name";
}
}
return QWidget::eventFilter(sender, event);
}
Полный рабочий пример доступен в GitHub .