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;
}
相关推荐
渡我白衣2 小时前
深入理解 OverlayFS:用分层的方式重新组织 Linux 文件系统
android·java·linux·运维·服务器·开发语言·人工智能
西游音月2 小时前
(6)框架搭建:Qt实战项目之主窗体快捷工具条
开发语言·qt
waves浪游2 小时前
进程概念(上)
linux·运维·服务器·开发语言·c++
百***92652 小时前
java进阶1——JVM
java·开发语言·jvm
杜子不疼.2 小时前
【C++】 map/multimap底层原理与逻辑详解
开发语言·c++
司铭鸿2 小时前
数学图论的艺术:解码最小公倍数图中的连通奥秘
运维·开发语言·算法·游戏·图论
Cocktail_py2 小时前
JS如何调用wasm
开发语言·javascript·wasm
饮长安千年月2 小时前
玄机-第八章 内存马分析-java03-fastjson
开发语言·python·安全·web安全·网络安全·应急响应
MediaTea3 小时前
Python 第三方库:OpenPyXL(Excel 文件读写与操作)
开发语言·python·excel