定义

QLable是提供一个文本和图片显示,没有提供用户交互功能。
一个QLable可以包含一下任意内容类型:

纯文本显示

首先我们构造一个QLabel对象,其中this为其所在的父窗体。通过调用setText可以为标签设置文本(Hello World),这时标签就可以正常显示出来了。为了显示更佳的效果,我们可以通过调用setStyleSheet来设置样式。color: white-顾名思义,就是为标签设置一个文本色(黑色)。

ui->setupUi(this); //显示窗口QLabel *pLable = new QLabel(this); //声明一个标签
pLable->setText("Hello World"); //设置标签的内容
pLable->setStyleSheet("color: Black"); //设置标签的颜色

setText()

使用setText()时,括号中只能是String型的,但是只要加上(""+variable)就可以将变量显示出来
m_labCellText->setText(“单元格内容:” + item->text());

对齐方式

默认的标签文本对齐方式为:左对齐、垂直居中,我们可以通过setAlignment来设置,包括:左、上、右、下、居中对齐,一般情况,我们会进行两两组合(水平方向、垂直方向)。
比如:居中对齐

setAlignment(Qt::AlignCenter);

使用样式表来控制(水平居右、垂直居下):

setStyleSheet("qproperty-alignment: 'AlignBottom | AlignRight';");

自动换行

如果文本过长,我们可以采用自动换行的方式来显示。

setWordWrap(true);

注意:当使用英文的时候,如果写为类似形式”abcdefghijklmnopqrstuvwxyz”则是不能换行的,why?因为中间没有空格,所以需要写为”abcde fghij klmno pqrst uvwxyz”。

设置行高

一般情况下,自动换行之后文本上下行会距离比较近,我们可以通过下面方式来设置行高。

pLabel->setWordWrap(true);
QString strText = QStringLiteral("一去二三里,烟村四五家。亭台六七座,八九十枝花。");
QString strHeightText = "<p style=\"line-height:%1%\">%2<p>";
strText = strHeightText.arg(150).arg(strText);
pLabel->setText(strText);

省略

如果过长,我们又不想换行,只想把其中一部分省略为…,那么我们可以通过QFontMetrics来实现,这里先不介绍QFontMetrics,感兴趣的童鞋可以先自行研究。

QString strText = QStringLiteral("一去二三里,烟村四五家。亭台六七座,八九十枝花。");
QString strElidedText = pLabel->fontMetrics().elidedText(strText, Qt::ElideRight, 200, Qt::TextShowMnemonic);
pLabel->setText(strElidedText);

垂直显示

默认情况下,文本显示方式为水平方向,如果我们需要在垂直方向上显示,需要用一些小技巧来处理。

QString strText = QStringLiteral("一去二三里,烟村四五家。");
pLabel->setText(strText.split("", QString::SkipEmptyParts).join("\n"));
pLabel->setAlignment(Qt::AlignCenter);

富文本

我们可以在助手中查找关于Using HTML Markup in Text Widgets的资料,查看Qt支持哪些HTML标记。
下面我们来写一段HTML代码,O(∩_∩)O哈哈~。。。显示不同颜色的文本以及图片

QString strHTML = QString("<html> \<head> \<style> \font{color:white;} #f{font-size:18px; color: green;} \</style> \</head> \<body>\<font>%1</font><font id=\"f\">%2</font> \<br/><br/> \<img src=\":/Images/logo\" width=\"100\" height=\"100\"> \</body> \</html>").arg("I am a ").arg("Qter");
pLabel->setText(strHTML);
pLabel->setAlignment(Qt::AlignCenter);

是不是很神奇?经常我们要用好几个控件来组合才能实现的功能,就仅仅几行HTML代码就搞定了。。。何乐而不为!

图像

首先我们构建一个QPixmap来作为显示的图片,然后设置标签的大小,可以通过setScaledContents按比例缩放图片达到理想的效果。

QPixmap pixmap(":/Images/logo");
pLabel->setPixmap(pixmap);
pLabel->setFixedSize(100, 100);
pLabel->setScaledContents(true);

动画

这里我们需要使用另外一个类QMovie来控制动画,start()可以进行播放与stop()则可以停止,也可以通过调用setSpeed()来设置动画的播放速度。

QMovie *pMovie = new QMovie(":/Images/movie");
pLabel->setMovie(pMovie);
pLabel->setFixedSize(135, 200);
pLabel->setScaledContents(true);
pMovie->start();

数字

如果我们需要显示一个数字,则可以调用setNum(),他可以将内容转换为纯文本。

pLabel->setNum(66.6);

很简单就一段代码,我们可以打开源码瞅瞅,究竟setNum是如何实现的。

void QLabel::setNum(int num)
{QString str;str.setNum(num);setText(str);
}

就三行代码,呵呵哒。。。超简单吧,我们要有一颗随时看源码的心!

超链接

我们需要简单使用标签写一段简单的HTML超链接代码
方法一
比较简单,直接调用setOpenExternalLinks(true)即可。

pLabel->setText(QString("<a href = \"%1\">%2</a>").arg("http://blog.csdn.net/liang19890820").arg(QStringLiteral("一去丶二三里")));
pLabel->setOpenExternalLinks(true);

方法二
声明一个槽openUrl,将其与linkActivated信号关联。

pLabel->setText(QString("<a href = \"%1\">%2</a>").arg("http://blog.csdn.net/liang19890820").arg(QStringLiteral("一去丶二三里")));
connect(pLabel, SIGNAL(linkActivated(QString)), this, SLOT(openUrl(QString)));void MainWindow::openUrl(const QString &link)
{QDesktopServices::openUrl(QUrl(link));
}

设置尺寸,位置

设置尺寸也有多种,常用的固定尺寸(FixedSize),最小尺寸(MinimumSize),最大尺寸(MaximumSize),代码如下:

setMinimumHeight(30);        //最小行高
setMinimumWidth(30);        //最小列宽
setMinimumSize(370, 150);    //设置最小尺寸
setMaximumHeight(30);    //最大行高
setMaximumWidth(30);        //最大列宽
setMaximumSize(370, 150);    //设置最大尺寸setFixedSize(365,240);        //设置固定尺寸
setFixedWidth(30);        //固定列宽
setFixedHeight(30);        //固定行高

设置Geometry

int x,y,w,h;
label = new QLabel(this);
label ->setGeometry(x,y,w,h);
//若label的尺寸已经设置,则w,h的值无效。

设置布局

QVBoxLayout *layout = new QVBoxLayout(this);
QLabel *label = new QLabel(QString("Holle,世界"), this);
layout->addWidget(label,Qt::AlignCenter);    //居中
//Qt::AlignCenter 中心对齐
//Qt::AlignLeft 左对齐
//Qt::AlignRight 右对齐
//QHBoxLayout:水平布局,在水平方向上排列控件,即:左右排列。
//QVBoxLayout:垂直布局,在垂直方向上排列控件,即:上下排列。

添加常规可视图片

labelImg = new QLabel;
Image1.load(":/img/head.jpg");
labelImg->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
labelImg->setPixmap(QPixmap::fromImage(Image1));
//.h文件
#include <QImage>
private:QImage Image1;

添加圆形可视图片,即QQ头像类

两种方式,一种直接将图片修改为圆形的透明图片,一种则是使用蒙版形式,使用图片处理工具创建一个圆形透明图片(*.png),然后Qt操作代码如下:

//.cpp文件
labelImg = new QLabel(this);
//设置蒙版
labelImg ->setMask(pixmapBack.mask());
//mask_30x30.png,是我做的圆形透明图片,已经导入到资源文件
labelImg ->setStyleSheet("border-image:url(qrc:/img/mask_30x30.png)");
//head.jpg,是要显示的图片类型大小随意,这里我用的是*.jpg。KeepAspectRatio:保持长宽比例
QPixmap head = QPixmap(":/img/head.jpg").scaled(QSize(labelImg->width(), labelImg->height()), Qt::KeepAspectRatio, Qt::SmoothTransformation);labelImg ->setPixmap(head);

实现被点击事件

标签实现被点击事件有两种方式,一种是自定义一个按钮类标签,一种是采用事件过滤,具体的请看代码。注:这里采用了鼠标事件。
1).自定义按钮类标签:

//ClickedLabel.h文件
#include <QLabel>
class ClickedLabel : public QLabel
{Q_OBJECTpublic:ClickedLabel( QWidget* parent = 0);int IsClicked;void mousePressEvent(QMouseEvent *e);//添加鼠标响应事件void mouseReleaseEvent(QMouseEvent *e);//添加鼠标释放事件signals:void clicked();//点击信号};
//ClickedLabel.cpp文件
ClickedLabel::ClickedLabel(QWidget* parent) : QLabel(parent)
{setText("作者:夜潇!");  //添加标签默认文本setAlignment(Qt::AlignCenter);  //设置默认对齐方式:中心对齐(居中)//设置默认标签风格//setStyleSheet("ClickedLabel { background-color: rgb(143,122,102); border-radius: 10px; font: bold; color: white; }");IsClicked = 0;
}void ClickedLabel::mousePressEvent ( QMouseEvent * e )
{IsClicked = 1;
}void ClickedLabel::mouseReleaseEvent ( QMouseEvent * e )
{if(IsClicked){emit clicked();IsClicked = 0;}
}

自定义按钮类标签
2).事件过滤标签:

#include <QDialog>
#include <QLabel>
#include <QEvent>class EventFilter : public QDialog
{Q_OBJECTpublic:EventFilter(QWidget *parent = 0,Qt::WindowFlags f=0);~EventFilter();
public slots:bool eventFilter(QObject *, QEvent *);
private:QLabel *label1;
};
//这里有一个默认的*.cpp的头文件,故此我将其省略。
#include <QHBoxLayout>
#include <QMouseEvent>EventFilter::EventFilter(QWidget *parent,Qt::WindowFlags f): QDialog(parent,f)
{label1 = new QLabel;QHBoxLayout *layout=new QHBoxLayout(this);layout->addWidget(label1);label1->installEventFilter(this);
}
bool EventFilter::eventFilter(QObject *watched, QEvent *event)
{if(watched==label1){if(event->type()==QEvent::MouseButtonPress){QMouseEvent *mouseEvent=(QMouseEvent *)event;if(mouseEvent->buttons()&Qt::LeftButton){label1->setText(tr("左键按下"));}else if(mouseEvent->buttons()&Qt::MidButton){label1->setText(tr("中键按下"));}else if(mouseEvent->buttons()&Qt::RightButton){label1->setText(tr("右键按下"));}}if(event->type()==QEvent::MouseButtonRelease){label1->setText(tr("鼠标释放"));}}return QDialog::eventFilter(watched,event);
}

实现超链接

label= new QLabel(tr("<style> a {text-decoration: none} </style><a href = http://haozip.2345.com>2345好压</a>"),this);
//文本无下划线:<style> a {text-decoration: none} </style>,如去掉则有下划线。

修改颜色

标签颜色有基本两处,一是文本颜色,二是背景颜色。而文本颜色设置两种,一种是用QPalette类,一种是StyleSheet类,代码如下:

label = new QLabel(this);
QPalette palette;
palette.setColor(QPalette::WindowText,Qt::red);
label->setPalette(palette);
//文本颜色:红色
label = new QLabel(this);
label -> setStyleSheet("QLabel { color: rgb(143,122,102);}");
label -> setStyleSheet("QLabel { color: red;}");
label -> setStyleSheet("QLabel { "color: #FF0000;";}");
//常见颜色十六进制值
<font color=red或"#FF0000">红色</font>
<font color="#dd0000">浅红色</font>
<font color="#660000">深红色</font>
<font color="#00dd00">浅绿色</font>
<font color="#006600">深绿色</font>
<font color="#0000dd">浅蓝色</font>
<font color="#000066">深蓝色</font>
<font color="#dddd00">浅黄色</font>
<font color="#666600">深黄色</font>
<font color="#00dddd">浅青色</font>
<font color="#006666">深青色</font>
<font color="#dd00dd">浅紫色</font>
<font color="#660066">深紫色</font>

设置背景颜色

label = new QLabel(this);
label ->setStyleSheet("background-color:lightred;");

设置圆角标签,且扩展类。注:此圆角和第5点中的圆不同用。

label = new Qlabel(this);
label -> setStyleSheet("Qlabel{color: white;""border-radius: 20px;  border: 2px groove gray;border-style: outset;}"/*此处设置圆角*/"Qlabel:hover{background-color:lightgreen; color: black;}""Qlabel:pressed{background-color:rgb(85, 170, 255);border-style: inset; }");
//注:当radius的值是控件高度或者宽度一半时可化作圆;border:边 hover:点燃 outset:常规 pressed:按下 inset:内嵌

QLable——标签相关推荐

  1. 【最终版】PyQt5 自定义标题栏,实现无边框,最小化最大化关闭事件,窗口拖动移动,窗口改变大小,仿百度网盘色调美化,添加内容窗口

    [最终版]PyQt5 自定义标题栏,实现无边框,最小化最大化关闭事件,窗口拖动移动,窗口改变大小,仿百度网盘色调美化,添加内容窗口 文章目录 [最终版]PyQt5 自定义标题栏,实现无边框,最小化最大 ...

  2. PyQt5 自定义标题栏,实现无边框,最小化最大化关闭事件,窗口拖动移动,窗口改变大小,仿百度网盘色调美化

    PyQt5 自定义标题栏,实现无边框,最小化最大化关闭事件,窗口拖动移动,窗口改变大小,仿百度网盘色调美化 文章目录 PyQt5 自定义标题栏,实现无边框,最小化最大化关闭事件,窗口拖动移动,窗口改变 ...

  3. qss样式表之QLable

    先来个示例 QLabel {font-family: "Microsoft YaHei";font-size: 14px;color: #BDC8E2;background-col ...

  4. PyQt5 QLabel标签

    PyQt5 QLabel标签 标签显示 标签快捷键功能 标签显示 QLabel背景色设置: palette = QPalette() # 创建调色板 palette.setColor(QPalette ...

  5. Go 知识点(18)— 条件编译(编译标签、文件后缀)

    1. 条件编译 Go 能根据所处环境选择对应的源码进行编译.让编译器只对满足条件的代码进行编译,将不满足条件的代码舍弃,这就叫做条件编译. 在 Go 中,也称之为 Build Constraints ...

  6. Git 常用操作(2)- 创建标签

    1. 列出标签 在 Git 中列出已有的标签是非常简单直观的.只需要输入 git tag: $ git tag v0.1 v1.3 2. 创建标签 Git 使用两种主要类型的标签:轻量标签(light ...

  7. Docker 入门系列(2)- Docker 镜像, 免 sudo 使用 docker 命令、获取查看、修改镜像标签、查找删除创建镜像、导入导出镜像

    1. 免 sudo 使用 docker 命令 如果还没有 docker group 就添加一个 sudo groupadd docker 将用户加入该 group 内 sudo gpasswd -a ...

  8. JSTL标签库学习笔记

    JSTL概述 apache的东西,依赖于EL 使用jstl需要导入jstl.jar包 标签库 core 核心标签库 fmt 格式化标签库 sql 数据库标签库,过时 xml xml标签库,过时 JST ...

  9. jquery过滤HTML标签方法

    //过滤HTML标签 function removeHTMLTag(str) {str = str.replace(/<\/?[^>]*>/g, ''); //去除HTML tags ...

最新文章

  1. 谈谈你对Android NDK的理解
  2. Metasploit save命令技巧
  3. 2020-09-01
  4. 提取某一个镇的行政边界_关于获取某个省份下面的 镇的 行政区划编码。
  5. 小米MIX4最新渲染图曝光;苹果首款OLED iPad将于2023年问世;格力将引进鸿蒙操作系统|极客头条...
  6. 《Java并发编程的艺术》:第2章 Java并发机制的底层实现原理
  7. java必背代码_java必背代码入门有哪些?如何写出优质代码?
  8. kitti数据集label解析和可视化教程
  9. 酷狗音乐分类html,酷狗音乐手机版创建歌单教程 分类自己的音乐库
  10. 20个免费和高质量的Android图标集—最佳
  11. (精华2020年5月12日更新) vue实战篇 axio.js封装和环境配置
  12. 素数筛【埃筛,欧拉筛(线性筛)】
  13. 由QQ电脑管家的提示看对新增系统启动项的提示和保护
  14. crt上传数据_使用SecureCRT上传文件到Linux服务器
  15. 打造急速开发框架FastApp
  16. linux系统遇到挖矿程序
  17. openwrt下wifi设置详细过程
  18. 小程序开发系列之基础部分-代码结构
  19. 【测试管理】测试进度汇总报告
  20. X-MAN丨华为郑叶来:不畏浮云遮望眼,做有信仰的云

热门文章

  1. JavaSE03: Arrays工具类的使用及简单数组算法
  2. python判断安全密码_python 字符串实例:检查并判断密码字符串的安全强度
  3. vue global filters
  4. 按照层次序列创建二叉树,并判断二叉树是否为二叉搜索树
  5. 三 .数据库(表操作)
  6. dorado7-发布
  7. java学习之—链表(3)
  8. 房子过户给子女哪种方式最合适?买卖?赠与?继承?不看就亏大了!
  9. 10个 NPM 使用技巧
  10. 兼容浏览器的布局CSS