QString sText1 = "Sample Text890\nSample Text 890";
QString sText2 = "Sample Text890 Sample Text 890";
label1_->setText(sText1);
label2_->setText(sText2);
label1_->setWordWrap(false);
label2_->setWordWrap(false);
label1_->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
label2_->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
編號框顯示其上方相應標簽的指標/資訊。
情況 1:BoundingRect 寬度不等于標簽 widthx2 BoundingRectHeight 等于標簽 widthx2
案例 2:BoundingRect 寬度和高度與標簽的寬度和高度匹配

案例 3:不知道 boundingrect 和 label geometry 是如何相關的!!
案例 4:不知道 boundingrect 和 label geometry 是如何相關的!!

案例5:
QString sText1 = "Sample Text890\nSample Text 890";
QString sText2 = "Sample Text890 Sample Text 890";
label1_->setWordWrap(true);
label2_->setWordWrap(true);
問題:我很困惑字體的邊界矩形和標簽的幾何形狀是如何相關的。
編輯:我已經用標簽自動換行 TRUE 更新了案例 5 和案例 6。
uj5u.com熱心網友回復:
從
與 QLabel 大小的關系
默認情況下,QLabel 不換行(請參閱wordWrap屬性),因此案例 3 和 4 不相關,因為您為字體度量明確指定了該選項。也就是說,如果您了解文本布局的作業原理,您可以獲得一致的結果。
例如,要獲得一致的邊界矩形,請使用一個非常大的矩形作為源:
QRect rect1 = fontMetrics.boundingRect(QRect(0, 0, 2000, 2000), Qt::TextWordWrap, sText1);
這將回傳一個等于標簽 basic 的大小sizeHint()。顯然,由于源矩形那么大,自動換行選項是無用的,使用0而不是Qt::TextWordWrap.
另一方面,你可以得到與空 QRect 相同的邊界矩形結果,使用minimumSizeHint()and 啟用換行:
label.setWordWrap(true)
QSize minWidth = label.minimumSizeHint().width()
QRect boundingRect(0, 0, minWidth, label.heightForWidth(minWidth))
但是請記住,在 QLabel 中使用自動換行可能會產生反直覺和不想要的結果;雖然這些結果可能看起來出乎意料,但它們實際上是意料之中的(請參閱有關布局問題的注釋:Qt 布局管理與網頁不同,并且優先級始終針對所有小部件,即使是為了標簽。如果標簽必須支持換行,但它也放置在復雜的布局中,當布局還包含可以根據整體可用大小調整其大小的小部件時,您需要明確設定合理的最小大小(寬度、高度或兩者);請參閱下面的相關說明。
最后的考慮
- QLabel 使用Qt 富文本處理框架的一部分,特別是QTextDocument、它的檔案布局和基本的QTextLayout;不幸的是,可能由于性能原因,所有這些組件都是 QLabel 私有的;可靠地計算 QLabel 大小的唯一方法(在極少數情況下確實需要)是對上述方面有深入的了解;
- QFontMetrics 和 QTextLayout 密切相關:前者使用后者計算布局文本 (
boundingRect(QRect, flags, text)) 的大小,反之則計算基本字形大小; - Qt 布局管理器將盡最大努力在布局中放置一個自動換行的標簽,但是,如上所述,結果可能會有所不同;
- 自動換行的文本不應該是布局的一部分:雖然這可能被認為是 Qt 的限制,但從 UX 的角度來看,它幾乎總是一個糟糕的選擇(請記住,程式不是網頁,它本質上是可滾動的);這些文本可能應該放在滾動區域中,因此最終考慮使用設定為 QTextEdit 或 QPlainTextEdit
readOnly并最終設定為透明背景以使其看起來“像標簽”; setContentsMargins()嘗試使用字體度量時,必須手動添加任何使用或 QSS(Qt 樣式表)設定的填充/邊框/邊距;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/518491.html
