qt显示类控件--- Label

目录

核心属性

案例演示

案例1:显示不同格式的文本

案例2:显示图片

案例3:⽂本对⻬,⾃动换⾏,缩进,边距

案例四:设置伙伴关系


复制代码
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;
}
相关推荐
用户805533698033 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner3 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz8 天前
QML Hello World 入门示例
qt
xcyxiner11 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner12 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner12 天前
DicomViewer (添加模型类)3
qt
xcyxiner13 天前
DicomViewer (目录调整) 2
qt
xcyxiner13 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00615 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术15 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript