2014-03-06 55 views
1

我遇到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 ::进入该区域是太小,更重要的是,不变 - 您可以将产生事件的标签和区域大小保持不变。

我用蓝色矩形标记了图片上的悬停区域,因为鼠标没有被捕获,无论出于何种原因。除此之外,它说的是“不是蜷缩”。我尝试了各种文字内容,各种文字大小,检查周围的所有方框,设置不同尺寸的政策,但该区域仍然相同。

enter image description here

+0

的关系HoverLabel vs. PlayerLabel对我来说不是很清楚。为什么在UI文件中创建小部件的子部件?在我看来,您创建的子部件不在任何布局内部,并且期望它具有其父部件的尺寸。将事件过滤器对象设置为QObject(而不是窗口小部件),并在ui-> hoverLabel_1上安装事件过滤器,而不是在_this_上。 –

+0

HoverLabel只是为了最小的样本而改名,现在已更正。无论如何打败了我,我一直在看那段代码,只要它不会发生在我身上,我会在错误的对象上调用installFilter。我刚开始使用QT,这种方法记录不完整,我只是试验,最终得到了一些结果......但不是正确的。你是对的,如果你愿意,可以把它作为答案。 – Raven

+0

谢谢!我在你的代码的帮助下实现了一个可移动的qlabel :) – gumlym

回答

0