qt 標簽 QTextBrowser QLabel


使用標簽控件時我首先想到的就是QLabel,QLabel支持自動換行,並可以解析富文本,是一個不錯的選擇,這也使的我並沒有去深入了解其他的可以有 同樣效果的控件,本篇文字我也主要是講解標簽的用法,可以如果QLabel既然能滿足我的需求了,我為什么還要寫這篇文字呢,原因就如下:QLabel自 動換行時不可以把一個字分開,例如出現一個很長的字符串時,這樣就出現兩種情況,一種就是產生水平滾動條;另外一種就是文字有一部分看不到了基於以上問 題,我開始了尋找其他控件替代QLabel,首先我找到的就是QTextBrowser,這個類也基本上滿足了在QLabel實現不了的功能,我自己封裝 的類代碼如下:

頭文件

 1 class CLabelBrowser : public QTextBrowser
 2 
 3 {
 4 
 5 Q_OBJECT
 6 
 7 public:
 8 
 9 CLabelBrowser(QWidget * parent = nullptr, bool enbale = false);
10 
11 ~CLabelBrowser();
12 
13 public:
14 
15 void SetAutoHeight(bool enbale){ m_AutoHeight = enbale; }//設置行高是否隨內容自動變化
16 
17 void ResetHeight();
18 
19 protected:
20 
21 virtual bool event(QEvent *) Q_DECL_OVERRIDE;
22 
23 virtual void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
24 
25 virtual void changeEvent(QEvent *) Q_DECL_OVERRIDE;
26 
27 private:
28 
29 bool m_AutoHeight = false;//自動行高,不顯示滾動條
30 
31 };
View Code

​/對應實現文件

//QTextBrowser::anchorClicked:url被點擊

//QTextBrowser::highlighted:鼠標移動到url上

 1 CLabelBrowser::CLabelBrowser(QWidget * parent, bool enable)
 2 
 3 : QTextBrowser(parent)
 4 
 5 , m_AutoHeight(enable)
 6 
 7 {
 8 
 9 setOpenLinks(false);//鼠標點擊時,不跳轉
10 
11 setContextMenuPolicy(Qt::NoContextMenu);//禁止右鍵菜單彈出
12 
13 connect(document(), &QTextDocument::contentsChanged, this, [this]{ ResetHeight(); });
14 
15 }
16 
17 CLabelBrowser::~CLabelBrowser()
18 
19 {}
20 
21 void CLabelBrowser::ResetHeight()
22 
23 {
24 
25 if (m_AutoHeight)
26 
27 {
28 
29 setFixedHeight(document()->size().rheight() + frameWidth() * 2);
30 
31 }
32 
33 }
34 
35 bool CLabelBrowser::event(QEvent * event)
36 
37 {
38 
39 if (event->type() == QEvent::Show)//控件首次顯示時,設置其高度
40 
41 {
42 
43 ResetHeight();
44 
45 }
46 
47 return __super::event(event);;
48 
49 }
50 
51 void CLabelBrowser::resizeEvent(QResizeEvent * event)
52 
53 {
54 
55 ResetHeight();//控件大小改變時,設置其高度
56 
57 __super::resizeEvent(event);
58 
59 }
60 
61 void CLabelBrowser::changeEvent(QEvent * event) 
62 
63 {
64 
65 __super::changeEvent(event);
66 
67 }
View Code

以上代碼不難理解,我只說下為什么這樣做,為了讓控件不出現垂直滾動條,我們需要實時修改控件的高度,修改高度的時機有這么幾點:控件初次顯示,控件大小發現變化,該類也提供了手動重置大小的接

為什么不在初始化的時候計算大小?答:因為初始化的時候控件的size拿不到實現效果如圖1所示

圖1 

如果不用支持長英文串換行,其實QLabel完全滿足我的要求,實現效果如圖2所示

下載鏈接:http://download.csdn.net/detail/qq_30392343/9581311

圖2
 

如果您覺得文章不錯,不妨給個打賞,寫作不易,感謝各位的支持。您的支持是我最大的動力,謝謝!!!

 

 

 

很重要--轉載聲明

  1. 本站文章無特別說明,皆為原創,版權所有,轉載時請用鏈接的方式,給出原文出處。同時寫上原作者:朝十晚八 or Twowords
  2. 如要轉載,請原文轉載,如在轉載時修改本文,請事先告知,謝絕在轉載時通過修改本文達到有利於轉載者的目的。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM