若是您以爲文章不錯,不妨給個打賞,寫做不易,感謝各位的支持。您的支持是我最大的動力,謝謝!!!
![](http://static.javashuo.com/static/loading.gif)
很重要--轉載聲明htm
- 本站文章無特別說明,皆爲原創,版權全部,轉載時請用連接的方式,給出原文出處。同時寫上原做者:朝十晚八 or Twowords
- 如要轉載,請原文轉載,如在轉載時修改本文,請事先告知,謝絕在轉載時經過修改本文達到有利於轉載者的目的。
使用標籤控件時我首先想到的就是QLabel,QLabel支持自動換行,並能夠解析富文本,是一個不錯的選擇,這也使的我並無去深刻了解其餘的能夠有 一樣效果的控件,本篇文字我也主要是講解標籤的用法,能夠若是QLabel既然能知足個人需求了,我爲何還要寫這篇文字呢,緣由就以下:QLabel自 動換行時不能夠把一個字分開,例如出現一個很長的字符串時,這樣就出現兩種狀況,一種就是產生水平滾動條;另一種就是文字有一部分看不到了基於以上問 題,我開始了尋找其餘控件替代QLabel,首先我找到的就是QTextBrowser,這個類也基本上知足了在QLabel實現不了的功能,我本身封裝 的類代碼以下:html
頭文件ide
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 };
/對應實現文件post
//QTextBrowser::anchorClicked:url被點擊this
//QTextBrowser::highlighted:鼠標移動到url上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 }
以上代碼不難理解,我只說下爲何這樣作,爲了讓控件不出現垂直滾動條,咱們須要實時修改控件的高度,修改高度的時機有這麼幾點:控件初次顯示,控件大小發現變化,該類也提供了手動重置大小的接spa
爲何不在初始化的時候計算大小?答:由於初始化的時候控件的size拿不到實現效果如圖1所示.net
若是不用支持長英文串換行,其實QLabel徹底知足個人要求,實現效果如圖2所示3d
下載連接:http://download.csdn.net/detail/qq_30392343/9581311code