使用标签控件时我首先想到的就是QLabel,QLabel支持自动换行,并可以解析富文本,是一个不错的选择,这也使的我并没有去深入了解其他的可以有 同样效果的控件,本篇文字我也主要是讲解标签的用法,可以如果QLabel既然能满足我的需求了,我为什么还要写这篇文字呢,原因就如下:QLabel自 动换行时不可以把一个字分开,例如出现一个很长的字符串时,这样就出现两种情况,一种就是产生水平滚动条;另外一种就是文字有一部分看不到了基于以上问 题,我开始了寻找其他控件替代QLabel,首先我找到的就是QTextBrowser,这个类也基本上满足了在QLabel实现不了的功能,我自己封装 的类代码如下:

头文件

 class CLabelBrowser : public QTextBrowser

 {

 Q_OBJECT

 public:

 CLabelBrowser(QWidget * parent = nullptr, bool enbale = false);

 ~CLabelBrowser();

 public:

 void SetAutoHeight(bool enbale){ m_AutoHeight = enbale; }//设置行高是否随内容自动变化

 void ResetHeight();

 protected:

 virtual bool event(QEvent *) Q_DECL_OVERRIDE;

 virtual void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;

 virtual void changeEvent(QEvent *) Q_DECL_OVERRIDE;

 private:

 bool m_AutoHeight = false;//自动行高,不显示滚动条

 };

​/对应实现文件

//QTextBrowser::anchorClicked:url被点击

//QTextBrowser::highlighted:鼠标移动到url上

 CLabelBrowser::CLabelBrowser(QWidget * parent, bool enable)

 : QTextBrowser(parent)

 , m_AutoHeight(enable)

 {

 setOpenLinks(false);//鼠标点击时,不跳转

 setContextMenuPolicy(Qt::NoContextMenu);//禁止右键菜单弹出

 connect(document(), &QTextDocument::contentsChanged, this, [this]{ ResetHeight(); });

 }

 CLabelBrowser::~CLabelBrowser()

 {}

 void CLabelBrowser::ResetHeight()

 {

 if (m_AutoHeight)

 {

 setFixedHeight(document()->size().rheight() + frameWidth() * );

 }

 }

 bool CLabelBrowser::event(QEvent * event)

 {

 if (event->type() == QEvent::Show)//控件首次显示时,设置其高度

 {

 ResetHeight();

 }

 return __super::event(event);;

 }

 void CLabelBrowser::resizeEvent(QResizeEvent * event)

 {

 ResetHeight();//控件大小改变时,设置其高度

 __super::resizeEvent(event);

 }

 void CLabelBrowser::changeEvent(QEvent * event) 

 {

 __super::changeEvent(event);

 }

以上代码不难理解,我只说下为什么这样做,为了让控件不出现垂直滚动条,我们需要实时修改控件的高度,修改高度的时机有这么几点:控件初次显示,控件大小发现变化,该类也提供了手动重置大小的接

为什么不在初始化的时候计算大小?答:因为初始化的时候控件的size拿不到实现效果如图1所示

图1 

如果不用支持长英文串换行,其实QLabel完全满足我的要求,实现效果如图2所示

下载链接:http://download.csdn.net/detail/qq_30392343/9581311

图2
 

如果您觉得文章不错,不妨给个打赏,写作不易,感谢各位的支持。您的支持是我最大的动力,谢谢!!!
 

很重要--转载声明

  1. 本站文章无特别说明,皆为原创,版权所有,转载时请用链接的方式,给出原文出处。同时写上原作者:朝十晚八 or Twowords
  2. 如要转载,请原文转载,如在转载时修改本文,请事先告知,谢绝在转载时通过修改本文达到有利于转载者的目的。

qt 标签 QTextBrowser QLabel的更多相关文章

  1. QT pyqt pyside2 QLabel 自动换行设置注意点

    QT pyqt pyside2 QLabel 自动换行设置注意点 先看效果: PySide2(QT5) 的 QT Designer (我在 QT4 的 designer 中不可以直接看效果,可能需要设 ...

  2. QT类之------QLabel

    QLabel 类代表标签,它是一个用于显示文本或图像的窗口部件. 构造 QLabel 类支持以下构造函数: [plain] view plaincopy QLabel(QWidget *parent  ...

  3. Qt之添加QLabel的点击事件

    QLabel功能为显示了一个字符串或者图片等信息,它本身没有click信号.也就不能够响应click点击事件,有什么办法来实现来,我们可以子类化QLabel,实现MouseXXXEvent.class ...

  4. Qt之重写QLabel类

    在mylabel.h 文件中#ifndef MYLABEL_H#define MYLABEL_H #include <QLabel>/*重新实现QLabel类,使其支持点击事件*/clas ...

  5. QT 实现在QLabel上画图

    QT之所以不能再任意控件上绘图是因为QT的事件过滤器把控件的绘图事件给过滤了. 在paintevent()函数中,通常需要设置QPainter对象,创建QPainter对象的同时需要指定绘图设备,即继 ...

  6. PyQt5笔记之标签

    标签 QLabel用于显示文本或图像.没有提供用户交互功能.标签的视觉外观可以通过各种方式进行配置,并且可以用于为另一个窗口小部件指定焦点助记键. 一个QLabel可以包含以下任意内容类型: 内容 设 ...

  7. Qt学习总结-ui篇

    控件设置透明度: QGraphicsOpacityEffect *effect = new QGraphicsOpacityEffect(this); effect->setOpacity(0. ...

  8. [Qt Creator 快速入门] 第3章 窗口部件

    从这一章开始正式接触Qt的窗口部件.在第2章曾看到 Qt Creator 提供的默认基类只有 QMainWindow.QWidget 和 QDialog 这3种.QMainWindow 是带有菜单栏和 ...

  9. VS+Qt+Halcon——显示图片,实现鼠标缩放、移动图片

    摘要 本篇博文记录一下,用VS+Qt+Halcon实现对图片的读取以及鼠标缩放,移动(鼠标事件调用了halcon自带的算子)的过程.以及遇到的坑..... 先来看一下动态效果图: 主要控件: 添加一个 ...

随机推荐

  1. HTML5+CSS3 1

    html5标准模板 <!DOCTYPE html>   //<!DOCTYPE>标签 向浏览器声明当前文档使用的HTML版本,<!DOCTYPE html>适用于所 ...

  2. git cannot lock ref

    参考博客:https://blog.csdn.net/lindexi_gd/article/details/79213042 错误原文: cannot lock ref ‘refs/remotes/o ...

  3. Network Security final project---War Game

    项目介绍: 为自己的网段设置防火墙并尝试攻击其他组 网络结构: 每组有3个机器,包含一个gateway和两个workstation,其中gateway是可以连接到其他组的gateway,但是无法连接到 ...

  4. Oracle截取JSON字符串内容

    CREATE OR REPLACE FUNCTION PLATFROM.parsejsonstr(p_jsonstr varchar2,startkey varchar2,endkey varchar ...

  5. redis消息队列,tp5.0,高并发,抢购

    redis处理抢购,并发,防止超卖,提速 1.商品队列(List列表),goods_list           控制并发,防止超卖 2.订单信息(Hash集合),order_info        ...

  6. Shell 脚本处理用户输入

    传递参数 跟踪参数 移动变量 处理选项 将选项标准化 获得用户的输入 bash shell提供了一些不同的方法来从用户处获取数据,包括命令行参数(添加在命令后数据),命令行选项(可以修改命令行为的单个 ...

  7. 配置NFS固定端口

    NFS启动时会随机启动多个端口并向RPC注册,为了设置安全组以及iptables规则,需要设置NFS固定端口.NFS服务需要开启 mountd,nfs,nlockmgr,portmapper,rquo ...

  8. mysql5.7忽略大小写问题

    mysql5.7忽略大小写问题 1.1 前言 新安装mysql5.7版本后,linux环境下默认是大小写敏感的. 1.2 忽略大小写敏感步骤 进入mysql配置文件:         vi   /et ...

  9. 刚发现 CSS 还存在一个命名规范 B.E.M

    Block !误区:这个block并非inline-block里的block,而是将所有东西都划分为一个独立的模块,一个header是block,header里嵌套的搜索框是block,甚至一个ico ...

  10. 通用类 对象和XML互转

    public class XMLHealper { /// <summary> /// 将自定义对象序列化为XML字符串 /// </summary> /// <para ...