目录
QLabel这个组件表示标签,用于显示图标和固定最大长度的文字
核心属性


案例演示
案例1:显示不同格式的文本
cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//QLabel这个组件表示标签,用于显示图标和固定最大长度的文字
//我们来了解下其的属性和内置的方法
//setTextFormat(Qt::) 用于设置文本的显示格式,一共可以设置4种不同的形式
//相关格式在Qt::TextFormat枚举类型里面
//设置成纯文本---最普通的文本
ui->label->setTextFormat(Qt::PlainText);
ui->label->setText("这是一段纯文本");
//设置为富文本(支持html标签),内容更丰富
ui->label_2->setTextFormat(Qt::RichText);
ui->label_2->setText("<b>这是一段富文本</b>");
//设置为markdown格式---支持markdown的书写格式
ui->label_3->setTextFormat(Qt::MarkdownText);
ui->label_3->setText("这是一段markdown文本");
//根据文本内容自动决定格式
ui->label_4->setTextFormat(Qt::AutoText);
ui->label_4->setText("<b>这是一段自动文本</b>");
}

案例2:显示图片
cpp
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QLabel>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
QLabel* lab;
~Widget();
//拖到窗口相当于触发这个事件,重写这个方法可以改变这个事件的逻辑, 本质就是多态
void resizeEvent(QResizeEvent *event) override;
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
cpp
#include "widget.h"
#include "ui_widget.h"
#include<QLabel>
#include<QDebug>
#include<QResizeEvent>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//对于一个标签组件不会自动提供滚动条
//为一个标签设置图片,让这个标签和整个窗口一样大
lab = new QLabel(this);
QRect rec = this->geometry();
lab->setGeometry(0, 0, rec.width(), rec.height()); //是设置到widget上只能这么大
QPixmap pixmap(":/jsj.png");
lab->setPixmap(pixmap);
//以上这么没有设置图片的大小,导致图片和label无法等大
//setScaledContents(bool) 启动图片或者文字的自动拉伸,此时图片就充满整个label啦
lab->setScaledContents(true);
//由于setGeometry设置大小是一次性的,所以当我们进行拉伸窗口的时候就没办法改变标签的大小了,这种硬编码没办法动态的改变大小
}
//此时传入的形参QResizeEvent内包含了实时显示的窗口的尺寸数据
void Widget::resizeEvent(QResizeEvent *event)
{
qDebug() << event->size();//长和宽
lab->setGeometry(0, 0, event->size().width(), event->size().height());
QPixmap pixmap(":/jsj.png");
lab->setPixmap(pixmap);
lab->setScaledContents(true);
}
Widget::~Widget()
{
delete ui;
}


案例3:⽂本对⻬,⾃动换⾏,缩进,边距
cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//QFrame 的4个控制视觉样式属性的方法,用来控制"边框长什么样"
//QLabel继承自QFrame
//frameShape ------ 外框形状
//frameShadow ------ 阴影/立体风格
//lineWidth ------ 外线宽
//(当 frameShadow = Plain 时,它就是肉眼看到的线宽。)
//midLineWidth ------ 中线宽(立体的)
//frameShadow 切到 Raised/Sunken,就会多出一条高亮/暗线,形成 3D 效果
//setAlignment(Qt::) 是 QLabel(以及部分其他控件)用来设置 内容对齐方式 的函数。
ui->label_2->setAlignment(Qt::AlignRight | Qt::AlignVCenter); // 右居中, 使用按位或进行包含调整
//由于文本调整策略很多,自己了解
//setWordWrap(bool) 用于设置自动换行, 只能让"纯文本"自动换行
ui->label_3->setText("sssssssssssssssssssssssssssssssss"); //
//我们发现QLabel面对有空格等特殊符号或中文时可以自动换行,只需要设置setWordWrap(true)即可,
//当面对没有分隔开的长串英文与数字、英文符号(如 '.'就是英文符号,'。'就是中文符号)时,QLabel无法自动换行
ui->label_3->setWordWrap(true);
//setIndent(px) //设置所有行的缩进,标签无法单独设置首行缩进
ui->label_4->setText("啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊"); //
ui->label_4->setWordWrap(true);
ui->label_4->setIndent(50);
//setMargin(px) 设置边距
ui->label_4->setMargin(30);
//setMargin(int) 就是 一次性设置 QLabel 四周的内边距(内容到边框的距离,单位像素)。
//由于不会拉伸文字所以会出现4边距离不一致的情况, 由于是相当于内缩的所以会有挡住文字的可能
//如果你想单独控制上下左右边的距离使用setContentsMargins
//setContentsMargins(px, px, px, px)
ui->label_4->setContentsMargins(10, 6, 6, 6);
}
Widget::~Widget()
{
delete ui;
}

案例四:设置伙伴关系
cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//设置label与按钮的伙伴关系
//setBuddy(QWidget*) 用于设置与某个控件的伙伴关系,相当于label变成快捷键能触发这个设置了伙伴关系的控件了
ui->label->setBuddy(ui->radioButton);
ui->label_2->setBuddy(ui->radioButton_2);
//我们直接点击这个label是没有用的,是在文本中存在使用&跟上一个字符来表示快捷键,无视大小写
//怎么触发:比如&a是通过键盘上alt+a键进行触发快捷键功能的
//label快捷键的功能要比QPushButton弱很多
//原因:QLabel 的"快捷键"功能只是把焦点转移到它的 buddy 控件,本身不触发任何动作;
//而 QPushButton 的快捷键会直接发出 clicked() 信号,执行一段业务逻辑------功能上"强"得多
}
Widget::~Widget()
{
delete ui;
}
