本示例建立一個類似于QLabel的小部件,如果文本太長而無法适合小部件的幾何形狀,則該小部件将以省略号的方式隐藏最後一條的可見行。
本示例ElidedLabel類是其實作核心,如果文本超出設定的矩形範圍,則省略最後一條可見行。
ElidedLabel類定義
像QLabel一樣,它ElidedLabel繼承自QFrame。這是ElidedLabel該類的定義:
isElided
屬性取決于視窗小部件的字型,文本内容和幾何形狀。每當這些更改中的任何一個發生時,
elisionChanged()
信号都可能觸發。我們将目前的
elided
值緩存起來,這樣就不必每次都要求重新計算它。
ElidedLabel類的實作
除了初始化成員變量外,構造函數還将大小政策設定為水準擴充,因為這是為了填充其容器的寬度并垂直增長。
設定文本的同時請求重繪小部件。
在
paintEvent()
中使用
QTextLayout
将内容劃分為幾行,這些行環繞在單詞邊界上。除最後一個可見行外,每行均在上一行下方繪制
lineSpacing
像素。
QTextLine
的
draw()
方法将使用坐标點作為左上角來繪制線條。
可是,
QTextLayout
不會忽略文本,是以必須以不同的方式對待最後一個可見行。如果最後一行太寬,則将其删除。
QPainter
的
drawText()
方法從基線開始繪制文本,該基線是最後繪制的線條下方的
ascecnt()
像素。
最後,再建立一行以檢視所有内容是否都适合該行。
關于更多
- 在QtCreator軟體可以找到:
- 或在以下Qt安裝目錄找到:
- 相關連結
- Qt君公衆号回複"入群"後,在群檔案擷取本示例代碼。
- Qt君公衆号回複『Qt示例』擷取更多内容。