Qt 基于文本大小隐藏QLabel

Qt 基于文本大小隐藏QLabel,qt,text,label,autoresize,Qt,Text,Label,Autoresize,我想编写一个定制的QLabel子类,其中包含一些更多的特性,用于响应性设计。在本例中,我想编写一个QLabel,它根据可用空间缩放文本。这很容易,但也有一些问题,因为Qt实习生的东西。(我必须将文本缩放到可用空间的0.9,否则调整窗口/小部件的大小会出现问题) 现在,我不想添加一种在字体大小低于特定阈值时完全隐藏标签的方法。然而,这似乎是一项相当复杂的任务 下面是我在类resizeEvent(QResizeEvent*event)函数中得到的结果。 现在,我的函数仅在文本大小低于阈值时将文本设置

我想编写一个定制的QLabel子类,其中包含一些更多的特性,用于响应性设计。在本例中,我想编写一个QLabel,它根据可用空间缩放文本。这很容易,但也有一些问题,因为Qt实习生的东西。(我必须将文本缩放到可用空间的0.9,否则调整窗口/小部件的大小会出现问题)

现在,我不想添加一种在字体大小低于特定阈值时完全隐藏标签的方法。然而,这似乎是一项相当复杂的任务

下面是我在类
resizeEvent(QResizeEvent*event)
函数中得到的结果。 现在,我的函数仅在文本大小低于阈值时将文本设置为

void CustomLabel::resizeEvent(QResizeEvent*event){
如果(自动调整字体大小){
this->setSilentText(labelText);//只是普通的setText函数,我为子类重写了它
QFont f=此->字体();
int flags=Qt::TextDontClip | Qt::TextWordWrap;
QRect fontbundrect=this->fontMetrics().boundingRect(this->rect(),flags,this->text());
float xFactor=(float)事件->size().width()/(float)fontbundrect.width();
float yFactor=(float)事件->大小().height()/(float)fontbundrect.height();
浮动系数=xFactor设置文本(“”;//替换文本
}否则{
f、 设置点Sizef(最小字体大小);
}
} 
}
此->设置字体(f);
}
QLabel::resizeEvent(事件);
}
顺便说一下,代码的某些部分是在stackoverflow上找到的,不是我的。;) 我想做的是完全隐藏标签。但是,标签不知道何时可以再次
show()
,因为此后似乎不会调用resizeEvent

有什么想法吗?
谢谢

正如您所注意到的,如果在小部件上调用hide(),它将无法接收调整大小事件。因为您要自定义类,而不是调用hide(),所以您可以只设置一个类变量来注意它是隐藏的,并重载paintEvent函数,而不是在设置变量时绘制小部件:-

void CustomLabel::paintEvent(QPaintEvent * event)
{
    if(m_hideOnMinimum)
        return;

    QLabel::paintEvent(event);
}

请注意,如果不绘制标签,标签将被隐藏,但用户可能仍然能够与其交互,因此您需要禁用标签或过载键盘/鼠标事件。

这将隐藏标签,但仍会保留空间:(我还尝试将宽度设置为固定值0。也不起作用。你是指版面中的空间?是的,但你也可以将其从版面中删除。如果我将其从版面中删除,标签将如何检测是否有足够的空间再次显示?;)你看到我的问题了;我现在做;这个问题并没有定义你所说的“可用空间”是什么意思。这就是问题所在假设我有一个标签,它可以将文本缩放到最大可能的大小,还可以缩放宽度以适应文本。因此,当高度是限制因素时,不必要的宽度将被切断。现在让我们假设字体的大小在某个点下降到一个阈值以下。知道标签将被隐藏,直到有足够的空间让标签将字体缩放到阈值以上。问题是标签应该如何知道何时再次查看。当它隐藏时,其他小部件将正常地占据这个位置,而不会再次将其泄露。