我希望我的程序在鼠标位于labelname
(a QLabel
)上时显示“标签名称上的鼠标”,而当我的鼠标位于labelname
上时,则打印“标签上没有鼠标”不在labelname
上。
即使我将鼠标放在labelname
上,我的程序也会打印“鼠标不在标签名称上”。
如何知道我的鼠标不在bool Dialog::eventFilter(QObject *obj, QEvent *e)
{
if(qobject_cast<QLabel*>(obj) == ui->labelname) {
cout << “mouse on label name” << endl;
}else if(qobject_cast<QLabel*>(obj) != ui->labelname) {
cout << “mouse not on label name” << endl;
}
return false;
}
上?
{{1}}
答案 0 :(得分:2)
确保正确安装event filter。另外,如果要跟踪鼠标位置,则必须启用mouseTracking
,否则将不会触发移动事件(尽管the ones会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中找到。