Qt常用控件之标签QLabel

news/2025/2/21 10:05:13

标签QLabel

QLabel 标签用来显示文本和图片,在 Qt 中使用频率很高。

1. Label属性

属性说明
textQLabel 中的文本。
textFormat文本的格式。其中 Qt::PlainText 为纯文本;Qt::RichText 为富文本(支持 html 格式); Qt::MarkdownText 为 markdown 格式; Qt::AutoText 为根据内容自动决定文本格式。
pixmapQLabel 内部包含的图片。
scaledContentstrue 表示内容自动拉伸填充,为 false 则不会。(如自动填充图片)
alignment对齐方案。可以设置水平和垂直方向如何对齐。
wordWraptrue 内部的文本会自动换行,为 false 则不会。
indent设置文本缩进,水平和垂直方向都生效。
margin内部文本和边框之间的边距。(与 indent 的不同点在于,margin 在上下左右四个方向都生效,而 indent 只生效两个方向)
openExternalLink是否允许打开一个外部链接(如当 QLabel 文本包含一个 url 时)。
buddyQLabel 关联一个 “伙伴” ,点击 QLabel 时就会激活对应的伙伴(如伙伴是一个 QCheckBox ,那么该 QCheckBox 就会被选中)。

2. 更改label的文本格式

//widget.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->label->setTextFormat(Qt::PlainText);
    ui->label->setText("这是一段纯文本");
    ui->label_2->setTextFormat(Qt::RichText);
    ui->label_2->setText("<b>这是一段富文本</b>");
    ui->label_3->setTextFormat(Qt::MarkdownText);
    ui->label_3->setText("## 这是一段markdown");

}

Widget::~Widget()
{
    delete ui;
}

QLabel1

3. QLabel设置图片

如果要对 QLabel 控件设置图片,可以使用 setPixmap() 接口设置 QLabelpixmap 属性,将图片添加到 QLabel 中,然后将 setScaledContents(true),这样图片就会自动填充,与 QLabel 的大小保持一致。

接着,可以将 QLabel 设置为与窗口大小一致,使用:

void setGeometry(int x, int y, int w, int h)
void setGeometry(const QRect &)

但要注意的是,如果是直接设置值,那么当窗口被拖拽时,QLabel 的大小是不会随窗口大小改变的。实际上,当我们拖拽放大或缩小窗口时,会持续触发窗口的 resize 事件(resizeEvent)。同时,Qt 为该事件留下了一个 size() 接口,用于获取窗口改变后的 QRect 对象。

我们只需要重写该事件的虚函数,让每次拖拽窗口时,都更新 QLabel 的大小即可:

//widget.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->label->setPixmap(QPixmap(":/jienigui.jpg"));
    ui->label->setScaledContents(true);

}

Widget::~Widget()
{
    delete ui;
}

void Widget::resizeEvent(QResizeEvent *event)
{
    ui->label->setGeometry(0,0,event->size().width(),event->size().height());
    /*这里写this->width()也是可以的,
    主要是通过重写resizeEvent()让QLabel的大小随事件的触发进行调整*/

}

注意要在 widget.h 里添加 resizeEvent 的声明,以及添加 #include <QResizeEvent> 头文件。

QLabel2

拖拽窗口改变窗口的大小,图片会随之改变大小。

4. 设置QLabel文本对齐方式

首先为了方便查看 QLabel 的边界,可以在控件右侧的 QFrame 中设置 frameShape ,选择能看到四个边框的属性即可:

QLabel3

然后,在代码中使用 setAlignment() 接口设置文本的对齐方式即可,文本对齐有四个枚举变量:

枚举变量作用
Qt::AlignLeft左对齐
Qt::AlignRight右对齐
Qt::AlignTop上对齐
Qt::AlignBottom下对齐
Qt::AlignHCenter水平居中对齐
Qt::AlignVCenter垂直方向居中对齐
Qt::AlignBaseline垂直与基线对齐
Qt::AlignJustify水平方向调整间距两端对齐

可以使用 | 使用多种对齐方式,如 Qt::AlignLeft|Qt::AlignTop 是左上对齐,Qt::AlignCenter 等价于 Qt::AlignHCenter | Qt::AlignVCenter

5. 设置QLabel自动换行

使用 setWordWrap(true) 可以将 wordWrap 属性设置为自动换行:

//widge.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->label->setWordWrap(true);
    ui->label->setText("人生就是起起落落落落落落落落落落落落落落落落落落落落落落落落落落");

}

Widget::~Widget()
{
    delete ui;
}

QLabel4

6. 设置QLabel缩进

使用 setIndent(int px) 接口可以设置 QLabel 的缩进长度,填入一个整数表示缩进的像素。注意 ident 是全文缩进,即文本所有的行都会缩进该值,且 indent 只在两个方向上生效,具体哪个方向要看 alignment 是如何对齐的。

//widge.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->label->setWordWrap(true);
    ui->label->setAlignment(Qt::AlignLeft);
    ui->label->setIndent(40);
    ui->label->setText("人生就是起起落落落落落落落落落落落落落落落落落落落落落落落落落落");

    ui->label_2->setWordWrap(true);
    ui->label_2->setAlignment(Qt::AlignLeft|Qt::AlignTop);
    ui->label_2->setIndent(40);
    ui->label_2->setText("人生就是起起落落落落落落落落落落落落落落落落落落落落落落落落落落");

}

Widget::~Widget()
{
    delete ui;
}

QLabel5

可以看到 label 设置为左对齐,只有左边被缩进了 40 个像素,而 label_2 设置了左上对齐,左边和上边都被缩进了 40 个像素。

7. 设置QLabel边距

使用 setMargin() 接口可以设置 QLabel 的左右边距。与 indent 属性不同的是,margin 的边距在四个方向上都生效:

//widge.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->label->setWordWrap(true);
    ui->label->setAlignment(Qt::AlignLeft);
    ui->label->setMargin(40);
    ui->label->setText("人生就是起起落落落落落落落落落落落落落落落落落落落落落落落落落落");

    ui->label_2->setWordWrap(true);
    ui->label_2->setAlignment(Qt::AlignLeft|Qt::AlignTop);
    ui->label_2->setMargin(40);
    ui->label_2->setText("人生就是起起落落落落落落落落落落落落落落落落落落落落落落落落落落");

}

Widget::~Widget()
{
    delete ui;
}



QLabel6

可以看到对齐方式没有影响到 margin 属性的边距。

8. QLabel设置伙伴关系

QLabel 设置了一个 CheckBox 为伙伴关系后,在 QLabel 的文本中写上 &[key](例如 &A ),可以将 Ctrl+A 设置为 QLabel 的快捷键,而 QLabelCheckBox 绑定了伙伴关系,该 CheckBox 就会被选中。实际这个功能好像也没有什么用。


http://www.niftyadmin.cn/n/5860661.html

相关文章

sass中@import升级@use的使用区别与案例

在 Sass 中&#xff0c;import 和 use 都用于模块化代码&#xff0c;但二者有显著区别。以下是主要差异和具体案例说明&#xff1a; 核心区别对比 特性 import (旧版) use (新版) 作用域 全局作用域&#xff08;变量/混合易冲突&#xff09; 局部作用域&#xff08;需通过…

敏捷开发07:敏捷项目可视化管理-ScrumBoard(Scrum板)使用介绍

ScrumBoard(Scrum板)介绍 ScrumBoard&#xff08;Scrum板&#xff09;是敏捷项目管理中使用的可视化工具&#xff0c;用于跟踪和监控冲刺阶段的任务进度。 主要通过可视化的看板来管理工作&#xff0c;它可视化了敏捷开发中的工作流程、任务状态、团队角色。 Scrum 团队在各…

基于Spark和Hive的酒店数据分析与推荐系统

技术介绍前端&#xff1a;html&#xff0c;css&#xff0c;js&#xff0c;Echats 后端&#xff1a;Django 数据库&#xff1a;MySQL, Hive 推荐算法&#xff1a;基于用户的协同过滤&#xff08;UserCF&#xff09; 爬虫&#xff1a;Selenium大数据框架&#xff1a;Spark#数据分…

微信小程序实现拉卡拉支付

功能需求&#xff1a;拉卡拉支付&#xff08;通过跳转拉卡拉平台进行支付&#xff09;&#xff0c;他人支付&#xff08;通过链接进行平台跳转支付&#xff09; 1.支付操作 //支付 const onCanStartPay async (obj) > {uni.showLoading({mask: true})// 支付接口获取需要传…

阿里云子账号管理ECS权限配置全指南

阿里云子账号管理ECS权限配置全指南 ——主账号授权三步走&#xff0c;附精细化权限管控方案 一、基础版&#xff1a;授予子账号ECS全量管理权限 Step1&#xff1a;主账号登录RAM控制台 进入阿里云控制台 → 顶部导航栏点击头像 → 选择访问控制(RAM)4。左侧菜单选择用户 → …

layui 远程搜索下拉选择组件(多选)

模板使用&#xff08;lay-module/searchSelect&#xff09;&#xff0c;依赖于 jquery、layui.dist 中的 dropdown 模块实现&#xff08;所以data 格式请参照 layui文档&#xff09; <link rel"stylesheet" href"layui-v2.5.6/dist/css/layui.css" /&g…

机器学习实战(9):神经网络基础——从感知机到多层感知机

机器学习中的神经网络部分是大模型LLM训练的基础之基础&#xff0c;熟练掌握这一部分的知识和基础技能对后续理解大模型原理至关重要&#xff01; 第9集&#xff1a;神经网络基础——从感知机到多层感知机 在机器学习中&#xff0c;神经网络&#xff08;Neural Networks&#…

矩阵加减乘除的意义与应用

矩阵加法 数学意义 线性空间的封闭性线性变换的叠加矩阵分解与表示 实际应用 数据聚合与统计图像处理与计算机视觉物理学与工程学动态系统与优化经济学与运筹学信号处理与通信游戏开发与计算机图形学环境科学与地理信息矩阵加法的关键特点 矩阵减法 数学意义线性空间封闭性 线…