qt 标签 QTextBrowser QLabel
2016-06-27 20:56
309 查看
使用标签控件时我首先想到的就是QLabel,QLabel支持自动换行,并可以解析富文本,是一个不错的选择,这也使的我并没有去深入了解其他的可以有 同样效果的控件,本篇文字我也主要是讲解标签的用法,可以如果QLabel既然能满足我的需求了,我为什么还要写这篇文字呢,原因就如下:QLabel自 动换行时不可以把一个字分开,例如出现一个很长的字符串时,这样就出现两种情况,一种就是产生水平滚动条;另外一种就是文字有一部分看不到了基于以上问 题,我开始了寻找其他控件替代QLabel,首先我找到的就是QTextBrowser,这个类也基本上满足了在QLabel实现不了的功能,我自己封装 的类代码如下:
头文件
View Code
以上代码不难理解,我只说下为什么这样做,为了让控件不出现垂直滚动条,我们需要实时修改控件的高度,修改高度的时机有这么几点:控件初次显示,控件大小发现变化,该类也提供了手动重置大小的接
为什么不在初始化的时候计算大小?答:因为初始化的时候控件的size拿不到实现效果如图1所示
图1
如果不用支持长英文串换行,其实QLabel完全满足我的要求,实现效果如图2所示
下载链接:http://download.csdn.net/detail/qq_30392343/9581311
图2
头文件
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() * 2); } } 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); }
View Code
以上代码不难理解,我只说下为什么这样做,为了让控件不出现垂直滚动条,我们需要实时修改控件的高度,修改高度的时机有这么几点:控件初次显示,控件大小发现变化,该类也提供了手动重置大小的接
为什么不在初始化的时候计算大小?答:因为初始化的时候控件的size拿不到实现效果如图1所示
图1
如果不用支持长英文串换行,其实QLabel完全满足我的要求,实现效果如图2所示
下载链接:http://download.csdn.net/detail/qq_30392343/9581311
图2
相关文章推荐
- qt 拖拽 修改大小
- qt 布局
- qt集成dsoframer.ocx打开office办公软件
- qt 窗口鼠标穿透
- Qt窗口定制
- qt4升级到qt5的一些问题
- qt 窗口动画
- qt系统托盘显示、无主窗体
- qt程序启动播放动画
- Qt之QToolButton
- Qt之QToolButton
- 如何在 静态编译的QT 5.5.1 中 使用数据库插件连接 ODBC(调用静态插件)
- Qt之QPushButton
- Qt之QPushButton
- Qt MVC
- Qt软件开发具有 管理员权限
- QT 实现固定大小圆形进度条
- QTableWidget中添加checkbox,并相应触发函数
- ECMAScript(一)
- Qt 的线程与事件循环