qt 标签 QTextBrowser QLabel
使用标签控件时我首先想到的就是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所示
如果不用支持长英文串换行,其实QLabel完全满足我的要求,实现效果如图2所示
下载链接:http://download.csdn.net/detail/qq_30392343/9581311
qt 标签 QTextBrowser QLabel的更多相关文章
- QT pyqt pyside2 QLabel 自动换行设置注意点
QT pyqt pyside2 QLabel 自动换行设置注意点 先看效果: PySide2(QT5) 的 QT Designer (我在 QT4 的 designer 中不可以直接看效果,可能需要设 ...
- QT类之------QLabel
QLabel 类代表标签,它是一个用于显示文本或图像的窗口部件. 构造 QLabel 类支持以下构造函数: [plain] view plaincopy QLabel(QWidget *parent ...
- Qt之添加QLabel的点击事件
QLabel功能为显示了一个字符串或者图片等信息,它本身没有click信号.也就不能够响应click点击事件,有什么办法来实现来,我们可以子类化QLabel,实现MouseXXXEvent.class ...
- Qt之重写QLabel类
在mylabel.h 文件中#ifndef MYLABEL_H#define MYLABEL_H #include <QLabel>/*重新实现QLabel类,使其支持点击事件*/clas ...
- QT 实现在QLabel上画图
QT之所以不能再任意控件上绘图是因为QT的事件过滤器把控件的绘图事件给过滤了. 在paintevent()函数中,通常需要设置QPainter对象,创建QPainter对象的同时需要指定绘图设备,即继 ...
- PyQt5笔记之标签
标签 QLabel用于显示文本或图像.没有提供用户交互功能.标签的视觉外观可以通过各种方式进行配置,并且可以用于为另一个窗口小部件指定焦点助记键. 一个QLabel可以包含以下任意内容类型: 内容 设 ...
- Qt学习总结-ui篇
控件设置透明度: QGraphicsOpacityEffect *effect = new QGraphicsOpacityEffect(this); effect->setOpacity(0. ...
- [Qt Creator 快速入门] 第3章 窗口部件
从这一章开始正式接触Qt的窗口部件.在第2章曾看到 Qt Creator 提供的默认基类只有 QMainWindow.QWidget 和 QDialog 这3种.QMainWindow 是带有菜单栏和 ...
- VS+Qt+Halcon——显示图片,实现鼠标缩放、移动图片
摘要 本篇博文记录一下,用VS+Qt+Halcon实现对图片的读取以及鼠标缩放,移动(鼠标事件调用了halcon自带的算子)的过程.以及遇到的坑..... 先来看一下动态效果图: 主要控件: 添加一个 ...
随机推荐
- 10_30_unittest
1.断言 1).self.assertEqual(2,res)#期望值qian.结果值hou2)TextTestRunner 源码 必要的参数3)测试结果 上下文管理器 with open(" ...
- Beginning Python Games Development
Like music and movies, video games are rapidly becoming an integral part of our lives. Over the year ...
- 恢复数据库的redo日志文件(由于异常关机引起)
需要事先进入sqlplus select * from v$log 打印相关文件信息 1.recover database until cancel(recover database using ba ...
- caffe 根据txt生成多标签LMDB数据
1. 前提: 已经准备好train.txt, test.txt文件, 格式如下 此处有坑, 如果是windows下生成txt, 换行符为\r\n, 需要替换成 \n才能在linux运行. 可以使用se ...
- MT7688交叉编译环境配置
在ubuntu下设置MT7688交叉编译环境,用于编译mt7688下使用的程序 1.首先在vmware下安装ubuntu64位,由于交叉编译工具需要64位系统,此次安装的是ubuntu14 2.在ub ...
- VS2017下使用Git遇到的问题
我在使用最新版的VS2017时,想获取服务器上最新代码,Fetch到了最新修改,但是在拉取代码的时候出现了问题 user@user-PC MINGW64 /d/demo/myrepos (dev-cs ...
- JS的常用属性
JS-------定义:基于事件和对象驱动,并具有安全性能的脚本语言. 引入:<script type=”text/javascript”>具体js代码</script> ...
- js实现八皇后,回溯法
八皇后问题:将八个皇后摆在一张8*8的国际象棋棋盘上,使每个皇后都无法吃掉别的皇后,一共有多少种摆法? 两个皇后不能同时在同一行,同一列,和斜对角线的位置上,使用回溯法解决. 从第一行选个位置开始放棋 ...
- C#三目运算符
在编写项目的时候,会经常用到 if else 判断语句,但有些简单的判断或赋值,可以通过三目运算符来完成! 例如: int sex=0; string sexText=""; if ...
- 什么是 ajax?----异步 javascript 和 xml
GET 用于请求服务器数据 POST 用于上传数据到服务器,或者修改服务器数据 ajax 异步通信,实现页面的局部刷新,按需获取数据,节约带宽,带来更好的用户体验 客户端与服务器在不必刷新浏览器的情况 ...