【发布时间】:2014-06-26 14:28:49
【问题描述】:
我想编写一个自定义 QLabel 子类,其中包含更多用于响应式设计的功能。在此示例中,我想编写一个 QLabel,它根据可用空间缩放文本。这很容易,但也有一些问题,因为 Qt-intern 的东西。 (我必须将文本缩放到可用空间的 0.9,否则调整窗口/小部件的大小会出错)
现在我不想添加一种在字体大小低于特定阈值时完全隐藏标签的方法。然而,这似乎是一项相当复杂的任务。
这是我目前在 resizeEvent(QResizeEvent *event) 函数中的内容。
目前,我的函数仅在大小低于阈值时将文本设置为 ""。
void CustomLabel::resizeEvent (QResizeEvent * event ) {
if(autoFontResize) {
this->setSilentText(labelText); // just the normal setText function, I overwrote it for the subclass
QFont f = this->font();
int flags = Qt::TextDontClip|Qt::TextWordWrap;
QRect fontBoundRect = this->fontMetrics().boundingRect(this->rect(), flags, this->text());
float xFactor = (float)event->size().width() / (float)fontBoundRect.width();
float yFactor = (float)event->size().height() / (float)fontBoundRect.height();
float factor = xFactor < yFactor ? xFactor : yFactor;
f.setPointSizeF(f.pointSize()*factor*0.9); //
if(minimumFontSize != 0) { // 0 = no minimum Size for the font
if(f.pointSize() < minimumFontSize) {
if(hideFontOnMinimum) { // either Hide or set to the limit size
this->setSilentText(""); //replace text
} else {
f.setPointSizeF(minimumFontSize);
}
}
}
this->setFont(f);
}
QLabel::resizeEvent(event);
}
顺便说一句,代码的某些部分是在 stackoverflow 上找到的,而不是我的。 ;)
我想做的是完全hide()这个标签。但是标签不知道何时可以再次show(),因为此后似乎没有调用 resizeEvent。
有什么想法吗? 谢谢!
【问题讨论】:
标签: qt text label autoresize