我遇到QLabel上的悬停功能问题。 我实现了这个作为事件过滤器:QLabel“悬停”区域太小
HoverLabel::HoverLabel(QWidget *parent) : QWidget(parent)
{
installEventFilter(this);
label = (QLabel *)parent;
show();
}
bool HoverLabel::eventFilter(QObject *object, QEvent *event)
{
if (object == this)
{
if (event->type() == QEvent::Enter)
{
label->setText("Howering");
return true;
}
else if (event->type() == QEvent::Leave)
{
label->setText("Not howering");
return true;
}
}
return false;
}
调用,而主构造函数运行为:
hoverLabels[0] = new HoverLabel(ui->hoverLabel_1);
现在一切正常,但如我GER的QEvent ::进入该区域是太小,更重要的是,不变 - 您可以将产生事件的标签和区域大小保持不变。
我用蓝色矩形标记了图片上的悬停区域,因为鼠标没有被捕获,无论出于何种原因。除此之外,它说的是“不是蜷缩”。我尝试了各种文字内容,各种文字大小,检查周围的所有方框,设置不同尺寸的政策,但该区域仍然相同。
的关系HoverLabel vs. PlayerLabel对我来说不是很清楚。为什么在UI文件中创建小部件的子部件?在我看来,您创建的子部件不在任何布局内部,并且期望它具有其父部件的尺寸。将事件过滤器对象设置为QObject(而不是窗口小部件),并在ui-> hoverLabel_1上安装事件过滤器,而不是在_this_上。 –
HoverLabel只是为了最小的样本而改名,现在已更正。无论如何打败了我,我一直在看那段代码,只要它不会发生在我身上,我会在错误的对象上调用installFilter。我刚开始使用QT,这种方法记录不完整,我只是试验,最终得到了一些结果......但不是正确的。你是对的,如果你愿意,可以把它作为答案。 – Raven
谢谢!我在你的代码的帮助下实现了一个可移动的qlabel :) – gumlym