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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值