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

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 就会被选中。实际这个功能好像也没有什么用。

相关文章:

  • 用scala做网站排名优化公司电话
  • iis 网站显示建设中石家庄网络seo推广
  • 网站公安局备案株洲24小时新闻
  • 上海仿站定制模板建站市场调研报告500字
  • html好看的颜色代码郑州网站推广优化公司
  • 西安网站建设设计天津seo推广
  • 【Content-Type详解、Postman中binary格式、json格式数据转原始二进制流等】
  • 避免踩雷!CUDA与Anaconda兼容性配置完全手册
  • 实验六 时序逻辑电路设计实验(设计分析)
  • ARM SOC 架构系统M系、R系、A系
  • 【前端小点】vue3项目内根据主题读取不同文件夹下的图片资源(图片文件)
  • 重磅来袭————YOLOv12:Attention-Centric Real-Time Object Detectors
  • AIGC视频生成明星——Emu Video模型
  • 5-循环语句
  • 【Linux-网络】初识计算机网络 Socket套接字 TCP/UDP协议(包含Socket编程实战)
  • 推荐系统-排序模型
  • 力扣-回溯-17 电话号码的字母组合
  • C++ 课程设计 汇总(含源码)
  • B+树作为数据库索引结构的优势对比
  • HC32F460_GPIO驱动库
  • 阿里云SLB负载均衡的ALB和NLB有啥区别?一个是7层一个是4层
  • Redis中哈希(Hash)常见命令详解
  • 快速入门Springboot+vue——MybatisPlus多表查询及分页查询
  • 第四章:高级特性与最佳实践 - 第四节 - Tailwind CSS CSS 提取和打包优化
  • [NKU]C++理论课 cours 3 数据抽象(封装->隐藏实现的手段,隐藏->封装的重要目标)
  • 跳格子游戏