当前位置: 首页 > article >正文

Qt常用控件之标签QLabel

标签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.kler.cn/a/555687.html

相关文章:

  • 跨中心模型自适应牙齿分割|文献速递-医学影像人工智能进展
  • QT实战-基于QWidget实现的异形tip窗口
  • 前端vue的一些常见项目启动命令
  • R语言NIMBLE、Stan和INLA贝叶斯平滑及条件空间模型死亡率数据分析:提升疾病风险估计准确性...
  • 鸿蒙5.0实战案例:基于measure实现的文本测量
  • VSCode集成deepseek使用介绍(Visual Studio Code)
  • 2022年下半年试题一:论基于构件的软件开发方法及其应用
  • AI工作流+专业知识库+系统API的全流程任务自动化
  • 网络安全-js安全知识点与XSS常用payloads
  • HTML项目一键打包工具:HTML2EXE 最新版
  • AI学习指南DeepSeek篇(6)-DeepSeek论文介绍
  • 第37章 合作之路与占坑成功
  • 源码方式安装llama.cpp及调试
  • 【爬虫基础】第一部分 网络通讯-Socket套接字 P2/3
  • 将 DeepSeek 接入 WPS 为办公提效 !
  • baby_web(WEB)
  • 算法模板(二分法开区间模板,二分法闭区间模板)
  • 京东cfe滑块 分析
  • 跟着柳叶刀数字健康,学习如何通过病理切片预测分子分类对预后的影响|项目复现
  • 【深度学习】矩阵的理解与应用