qt显示类控件--- Label
目录
核心属性
案例演示
案例1:显示不同格式的文本
案例2:显示图片
案例3:⽂本对⻬,⾃动换⾏,缩进,边距
案例四:设置伙伴关系
QLabel这个组件表示标签,用于显示图标和固定最大长度的文字
核心属性


案例演示
案例1:显示不同格式的文本
#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:显示图片
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include<QLabel>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);QLabel* lab;~Widget();//拖到窗口相当于触发这个事件,重写这个方法可以改变这个事件的逻辑, 本质就是多态void resizeEvent(QResizeEvent *event) override;private:Ui::Widget *ui;};
#endif // WIDGET_H
#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:⽂本对⻬,⾃动换⾏,缩进,边距
#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;
}

案例四:设置伙伴关系
#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;
}

