显示类控件——Label

news2024/11/29 20:51:01

🐌博主主页:🐌​倔强的大蜗牛🐌​
📚专栏分类:QT
❤️感谢大家点赞👍收藏⭐评论✍️

文章目录

  • 一、Label
    • 介绍
    • 属性
    • 代码示例: 显示不同格式的文本
    • 代码示例: 显示图片
    • 代码示例: 文本对齐, 自动换行, 缩进, 边距
    • 代码示例: 设置伙伴


一、Label

介绍

QLabel 可以用来显示文本和图片.

属性

核心属性如下

属性说明
textQLabel 中的文本
textFormat文本的格式.
•Qt::PlainText 纯文本
• Qt::RichText 富文本(支持 html 标签)
• Qt::MarkdownText markdown 格式
• Qt::AutoText 根据文本内容自动决定文本格式.
pixmapQLabel 内部包含的图片.
scaledContents设为 true 表示内容自动拉伸填充 QLabel
设为 false 则不会自动拉伸
alignment对齐方式.
可以设置水平和垂直方向如何对齐.
wordWrap设为 true 内部的文本会自动换行.
设为 false 则内部文本不会自动换行.
indent设置文本缩进. 水平和垂直方向都生效
margin内部文本和边框之间的边距.
不同于于 indent, 但是是上下左右四个方向都同时有效.
而 indent 最多只是两个方向有效(具体哪两个方向有效取决于 alignment )
openExternalLinks是否允许打开一个外部的链接.
(当 QLabel 文本内容包含 url 的时候涉及到)
buddy给 QLabel 关联一个 “伙伴” , 这样点击 QLabel 时就能激活对应的伙伴.
例如伙伴如果是一个 QCheckBox, 那么该 QCheckBox 就会被选中.

代码示例: 显示不同格式的文本

  1. 在界面上创建三个 QLabel
    尺寸放大一些. objectName 分别为 label, label_2, label_3
    在这里插入图片描述

  2. 修改 widget.cpp, 设置三个 label 的属性

#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;
}
  1. 运行程序, 观察效果
    在这里插入图片描述

代码示例: 显示图片

虽然 QPushButton 也可以通过设置图标的方式设置图片, 但是并非是一个好的选择. 更多的时候还是希望通过 QLabel 来作为⼀个更单纯的显示图片的式.

  1. 在界面上创建一个 QLabel, objectName 为 label
    在这里插入图片描述

  2. 创建 resource.qrc 文件, 并把图片导入到 qrc 中
    在这里插入图片描述

  3. 修改 widget.cpp, 给 QLabel 设置图片

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    // 设置 label ⼤⼩和窗口一样大
    QRect windowRect =this->geometry();
    ui->label->setGeometry(0, 0, windowRect.width(),windowRect.height());
    QPixmap pixmap(":/1.png");
    ui->label->setPixmap(pixmap);
}

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

执行程序, 观察效果
在这里插入图片描述
图片并没有把 QLabel 填充满.

  1. 修改代码, 设置 scaledContents 属性
// 设置内容伸缩
   ui->label->setScaledContents(true);

再次运行, 观察效果, 可以看到图片已经被拉伸, 可以把窗口填满了.
在这里插入图片描述

  1. 此时, 如果拖动窗口大小, 可以看到图片并不会随着窗口大小的改变而同步变化.
    在这里插入图片描述
    为了解决这个问题, 可以在 Widget 中重写 resizeEvent 函数.先在widget.h中修改

widget.h

 void resizeEvent(QResizeEvent *event);

widget.cpp

void Widget::resizeEvent(QResizeEvent *event) 
{

    ui->label->setGeometry(0, 0, event->size().width(), event->size().height());

    qDebug() << event->size();
}

执行程序, 此时改变窗口大小, 图片也会随之变化.
在这里插入图片描述


此处的 resizeEvent 函数我们没有手动调用, 但是能在窗口大小变化时被自动调用.

这个过程就是依赖 C++ 中的多态来实现的. Qt 框架内部管理着 QWidget 对象表示咱们的窗口. 在窗口大小发生改变时, Qt 就会自动调用resizeEvent 函数.

但是由于实际上这个表示窗口的并非是 QWidget, 而是 QWidget 的子类, 也就是咱们自己写的 Widget. 此时虽然是通过父类调用函数, 但是实际上执行的是子类的函数(也就是我们重写后的 resizeEvent ).

此处属于是多态机制的一种经典用法. 通过上述过程, 就可以把自定义的代码, 插入到框架内部执行. 相当于 “注册回调函数” .

代码示例: 文本对齐, 自动换行, 缩进, 边距

  1. 创建四个 label, objectName 分别是 label 到 label_4
    并且在 QFrame 中设置 frameShape 为 Box (设置边框之后看起来会更清晰⼀些)
    在这里插入图片描述

在这里插入图片描述
QFrame 是 QLabel 的父类. 其中 frameShape 属性用来设置边框性质
• QFrame::Box :矩形边框
• QFrame::Panel :带有可点击区域的面板边框
• QFrame::WinPanel :Windows风格的边框
• QFrame::HLine :水平线边框
• QFrame::VLine :垂直线边框
• QFrame::StyledPanel :带有可点击区域的面板边框,但样式取决于窗口主题

  1. 编写 widget.cpp, 给这四个 label 设置属性.
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    // 设置⽂字居中对⻬
     ui->label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
     ui->label->setText("垂直水平居中的文本");
     // 设置⾃动换⾏
     ui->label_2->setAlignment(Qt::AlignTop | Qt::AlignLeft);
     ui->label_2->setWordWrap(true);
     ui->label_2->setText("这是一个很长的文本这是一个很长的文本这是一个很长的文本这是一个很长的文本这是一个很长的文本这是一个很长的文本");
     // 设置⾸⾏缩进
     ui->label_3->setAlignment(Qt::AlignTop | Qt::AlignLeft);
     ui->label_3->setIndent(20);
     ui->label_3->setText("这是一个很长的文本这是一个很长的文本这是一个很长的文本这是一个很长的文本这是⼀个很长的文本这是⼀个很长的文本");
     // 设置边距
     ui->label_4->setAlignment(Qt::AlignTop | Qt::AlignLeft);
     ui->label_4->setMargin(20);
     ui->label_4->setText("这是一个很长的文本这是一个很长的文本这是一个很长的文本这是一个很长的文本这是⼀个很长的文本这是⼀个很长的文本");
}

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

  1. 运行程序, 可以看到如下效果
    • 第⼀个 label 垂直水平居中
    • 第⼆个 label 设置了 wordWrap, 能够自动换行
    • 第三个 label 设置了 Indent, 左侧和上方和边框有间距. 右侧则没有.
    • 第四个 label 设置了 margin, 四个方向均有间距(图上仅体现出三个方向, 下方看不出来).
    在这里插入图片描述

代码示例: 设置伙伴

  1. 创建两个 label 和 两个 radioButton.
    在这里插入图片描述
  2. 编写 widget.cpp, 设置 buddy 属性
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    // 设置 label 的伙伴 widget
     ui->label->setBuddy(ui->radioButton);
     ui->label_2->setBuddy(ui->radioButton_2);
}

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

  1. 运行程序, 可以看到, 按下快捷键 alt + a 或者 alt + b, 即可选中对应的选项.
    在这里插入图片描述

❤️结语:
本次精彩内容已圆满结束!希望各位读者在阅读过程中能够收获满满。在此,特别感谢各位读者的支持与三连赞。如果文章中存在任何问题或不足之处,欢迎在评论区留言,蜗牛必定会认真对待并加以改进,以便为大家呈现更优质的文章。你们的支持与鼓励,将是博主不断前进的最大动力。再次感谢大家的陪伴与支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1824885.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在Kubernetes中部署Elasticsearch高可用集群详细教程

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

【Pycharm】设置双击打开文件

概要 习惯真可怕。很多小伙伴用习惯了VsCode开发&#xff0c;或者其他一些开发工具&#xff0c;然后某些开发工具是单击目录文件就能打开预览的&#xff0c;而换到pycharm后&#xff0c;发现目录是双击才能打开预览&#xff0c;那么这个用起来就特别不习惯。 解决办法 只需一…

数智教育创新如何向未来?腾讯云与你探索革新之路

引言 随着科技革命的快速发展&#xff0c;掀起教育领域的变革&#xff0c;新理念、新技术、新模式、新应用正不断涌现&#xff0c;正塑造着教育的未来形态。未来科技还将如何赋能教育创新&#xff1f; 5月31日&#xff0c;由腾讯云TVP 与西安电子科技大学联合举办的「数智教育的…

智慧场馆:绝对是科技+建筑的完美盛宴,有图有真相。

2024-01-03 14:34贝格前端工场 去年的亚运会&#xff0c;让大家体验了一把建筑科技&#xff0c;现在这个依然成了新趋势&#xff0c;贝格前端工场借此描述下场馆和科技的紧密联络&#xff0c;以及智慧场馆的应用场景。 智慧场馆是指通过科技手段将传统场馆进行升级改造&#…

扩展欧几里得算法——AcWing.877扩展欧几里得算法

扩展欧几里得算法 定义 扩展欧几里得算法是用来在已知整数 a、b 的情况下&#xff0c;求解一组整数 x、y 使得 ax by gcd(a, b)&#xff08;gcd 表示最大公约数&#xff09;。 运用情况 求解线性同余方程。在密码学等领域有广泛应用。 注意事项 要注意边界情况和特殊值…

LabVIEW软件开发任务的工作量估算方法

在开发LabVIEW软件时&#xff0c;如何准确估算软件开发任务的工作量。通过需求分析、功能分解、复杂度评估和资源配置等步骤&#xff0c;结合常见的估算方法&#xff0c;如专家判断法、类比估算法和参数估算法&#xff0c;确保项目按时按质完成&#xff0c;提供项目管理和资源分…

理解Es的DSL语法(一):查询

目录 DSL相关联的基本概念 ElasticSearch的字段类型 ElasticSearch的查询类型 DSL语法 query 普通查询 布尔查询 字符串构建查询 _source from和size sort 关于sort和查询的相关性评分 关于sort的性能 DSL相关联的基本概念 Es的DSL并不是独立的知识点&#xff…

深入理解计算机系统 家庭作业6.35

第一步先求(S,E,B,m) 题目说共C128个字节,块大小B为16个字节,那就是分为八组:0,1,2,3,4,5,6,7.然后每组存4个int 每个4字节 CB*E*S .B16 ,直接映射的E就是1,所以S8 (S,E,B,m)(8,1,16,7) C128M128s3b4t0 sizeof(int)0100地址(二进制)COCIsrc[0][0]00000000000000组0src[0][1…

气膜球幕影院:大众追捧的全新体验—轻空间

近年来&#xff0c;气膜球幕影院因其独特的观影体验和灵活的应用&#xff0c;受到了广大观众的热烈欢迎。轻空间带您来探讨一下气膜球幕影院为何如此受欢迎。 沉浸式体验的吸引力 气膜球幕影院的360度全景沉浸式体验&#xff0c;让观众仿佛置身于影片的世界中。这种前所未有的观…

【计算机视觉】人脸算法之图像处理基础知识(一)

图像处理基础知识&#xff08;一&#xff09; 1.图像的构成 图像的构成可以包括以下几方面知识&#xff1a; 1.像素&#xff1a;图像的基本单位&#xff0c;是图像中的一个点。每个像素都有特定的位置和色彩值。在数字图像中&#xff0c;像素的颜色通常由红、绿、蓝&#xf…

cocos creator如何使用cryptojs加解密(及引入方法)

cocos creator如何使用cryptojs加解密&#xff08;及引入方法&#xff09; 如果想转请评论留个言并注明原博 Sclifftop 13805064305 阿浚 cocos creator如何使用cryptojs加解密&#xff08;及引入方法&#xff09; 步骤 获取库 1. npm install crypto-js -g&#xff0c;加不加…

跨域问题以及解决方案

文章目录 1.什么是跨域访问&#xff1f;2. AJAX 请求无法跨域访问的原因&#xff1a;同源策略3. 解决AJAX跨域访问的方案包括哪些3.1 代理服务器方案的实现原理 1.什么是跨域访问&#xff1f; (1) 在a页面中想获取b页面中的资源&#xff0c;如果a页面和b页面所处的协议、域名、…

如何在Spring Boot中实现图片上传至本地和阿里云OSS

在开发Web应用时&#xff0c;处理文件上传是常见的需求之一&#xff0c;尤其是在涉及到图片、视频等多媒体数据时。本文将详细介绍如何使用Spring Boot实现图片上传至本地服务器以及阿里云OSS存储服务&#xff0c;并提供完整的代码示例。 一、上传图片至本地 首先&#xff0c…

五、Nginx配置文件-server模块

目录 一、概述 二、虚拟主机设置的三种形式 1、基于端口号配置 2、基于域名配置 3、基于ip配置 三、常用参数 1、listen 2、server_name 3、location 3.1、常见的Nginx正则表达式 3.2、location正则&#xff1a; 3.3示例 4、root 5、index 6、error_page 7、deny…

C#——结构体详情

结构体 结构体也被称为结构类型&#xff08;“structure type”或“struct type”&#xff09;&#xff0c;它是一种可封装数据和相关功能的值类型&#xff0c;在语法上结构体与类&#xff08;class&#xff09;非常相似&#xff0c;它们都可以用来封装数据&#xff0c;并且都…

笔记本电脑安装属于自己的Llama 3 8B大模型和对话客户端

选择 Llama 3 模型版本&#xff08;8B&#xff0c;80 亿参数&#xff09; 特别注意&#xff1a; Meta 虽然开源了 Llama 3 大模型&#xff0c;但是每个版本都有 Meta 的许可协议&#xff0c;建议大家在接受使用这些模型所需的条款之前仔细阅读。 Llama 3 模型版本有几个&…

德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第八周) - 现代大语言模型

现代大语言模型 1. GPT-32. 上下文学习 2.1. 零样本提示2.2. 少样本提示2.3. 归纳头 3. 对齐 3.1. 指令微调3.2. 基于人类反馈的强化学习3.3. 事实与幻觉 1. GPT-3 GPT系列论文 GPT-1(2018): Improving Language Understanding by Generative Pre-TrainingGPT-2(2019): Lang…

missing authentication credentials for REST request

1、报错截图 2、解决办法 将elasticsearch的elasticsearch.yml的 xpack.security.enabled: true 改为 xpack.security.enabled: false

字节智能体平台:扣子原理和实践案例

完整内容&#xff1a; 字节智能体平台&#xff1a;扣子原理和实践案例

JAVA小知识20:万字详解List与ArrayList

一、集合简介 1.1、什么是集合&#xff1f; 可同时存储多个元素的数据结构就是集合。 1.2、为什么要有集合&#xff1f; 我们可以使用数组同时存储多个元素&#xff0c;但是数组有个弊端。数组创建之后长度就会固定&#xff0c;如需扩容则需要手动扩容&#xff0c;我们需要…