9.QT-显示类控件|Label|显示不同格式的文本|显示图片|文本对齐|自动换行|缩进|边距|设置伙伴(C++)

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
![[Pasted image 20250420101138.png]]

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

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

![[Pasted image 20250420103816.png]]

代码⽰例:显⽰图⽚

虽然 QPushButton 也可以通过设置图标的⽅式设置图⽚,但是并⾮是⼀个好的选择.更多的时候还是希望通过 QLabel 来作为⼀个更单纯的显⽰图⽚的⽅式
1)在界⾯上创建⼀个QLabel, objectName 为 label
![[Pasted image 20250420105618.png]]

2)创建 resource.qrc ⽂件,并把图⽚导⼊到qrc中
![[Pasted image 20250420105554.png]]

3)修改widget.cpp,给QLabel设置图⽚
QWidget大小800x600
![[Pasted image 20250420105805.png]]

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//先把QLabel设置成和窗口一样大,并且把这个QLabel左上角设置到窗口左上角这里QRect windowRect = this->geometry();ui->label->setGeometry(0,0,windowRect.width(),windowRect.height());QPixmap pixmap(":/miku.jpg");ui->label->setPixmap(pixmap);
}

![[Pasted image 20250420110242.png]]

miku.jpg的尺寸是1222x903

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//先把QLabel设置成和窗口一样大,并且把这个QLabel左上角设置到窗口左上角这里QRect windowRect = this->geometry();ui->label->setGeometry(0,0,windowRect.width(),windowRect.height());QPixmap pixmap(":/miku.jpg");ui->label->setPixmap(pixmap);//启动自动拉伸,图片就能填充满整个窗口ui->label->setScaledContents(true);
}

![[Pasted image 20250420110453.png]]

但是一拖动,图片没有跟着适应窗口
![[Pasted image 20250420110536.png]]

之前的尺寸设置是一次性的,程序运行起来以后,QLabel的尺寸就固定下来了,窗口发生改变,QLabel不会改变
为了解决这个问题,可以在Widget中重写resizeEvent函数.

Qt中,表示用户的操作,有两类概念一个是信号,另一个是事件~~
当用户拖拽修改窗口大小的时候,就会触发resize事件(resizeEvent)
像resize这样的事件,是连续变化的.把窗口尺寸从A拖到B这个过程中,会触发出一系列的resizeEvent 此时就可以借助resizeEvent来完成上述的功能
可以让Widget窗口类,重写父类(QWidget)的resizeEvent虚函数

在鼠标拖动窗口尺寸的过程中这个函数就会被反复调用执行
每次触发一个resizeEvent事件都会调用一次对应的虚函数
由于此处进行了函数重写,调用父类的虚函数就会实际调用到子类的对应的函数(多态)
widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void resizeEvent(QResizeEvent *event);
private:Ui::Widget *ui;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QResizeEvent>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//先把QLabel设置成和窗口一样大,并且把这个QLabel左上角设置到窗口左上角这里QRect windowRect = this->geometry();ui->label->setGeometry(0,0,windowRect.width(),windowRect.height());QPixmap pixmap(":/miku.jpg");ui->label->setPixmap(pixmap);//启动自动拉伸,图片就能填充满整个窗口ui->label->setScaledContents(true);
}Widget::~Widget()
{delete ui;
}// 重写 resizeEvent. 这个函数会在窗⼝⼤⼩发⽣改变时被⾃动调⽤.
//此处的形参event是非常有用的,这里就包含了触发这个resize事件这一时刻,窗口的尺寸的数值
void Widget::resizeEvent(QResizeEvent *event)
{qDebug() << event->size();
}

![[Pasted image 20250420123738.png]]

执⾏程序,此时改变窗⼝⼤⼩,图⽚也会随之变化.
于此同时,在控制台⾥也能够看到尺⼨变化的过程

void Widget::resizeEvent(QResizeEvent *event)
{qDebug() << event->size();// 可以直接通过 this->width() 和 this->height() 设置 label 新的尺⼨, 也可以通过event 参数拿到新的尺⼨.// ui->label->setGeometry(0, 0, this->width(), this->height());ui->label->setGeometry(0, 0, event->size().width(), event->size().height());
}

![[Pasted image 20250420124345.png]]

此处的 resizeEvent 函数我们没有⼿动调⽤,但是能在窗⼝⼤⼩变化时被⾃动调⽤.这个过程就是依赖C++中的多态来实现的.Qt框架内部管理着QWidget对象表⽰咱们的窗⼝.在窗⼝⼤⼩发⽣改变时,Qt就会⾃动调⽤ resizeEvent 函数.
但是由于实际上这个表⽰窗⼝的并⾮是QWidget,⽽是QWidget的⼦类,也就是咱们⾃⼰写的Widget.此时虽然是通过⽗类调⽤函数,但是实际上执⾏的是⼦类的函数(也就是我们重写后的 resizeEvent ).
此处属于是多态机制的⼀种经典⽤法.通过上述过程,就可以把⾃定义的代码,插⼊到框架内部执⾏.相当于"注册回调函数“

在实际编程中,指定回调函数其实有很多种写法:

  1. 设置函数指针
  2. 设置仿函数(函数对象)
  3. 设置lambda
  4. 通过重写父类虚函数(框架中拿看父类的指针调用这个函数.如果你创建了子类重写了这个函数此时在多态机制下,实际执行的就是子类的函数了)
  5. Qt的信号槽
代码⽰例:⽂本对⻬,⾃动换⾏,缩进,边距

1)创建四个label, objectName 分别是 label 到 label_4
并且在 QFrame 中设置 frameShape 为 Box (设置边框之后看起来会更清晰⼀些)
![[Pasted image 20250420124851.png]]

QFrame 是 QLabel 的⽗类.其中 frameShape 属性⽤来设置边框性质.

  • QFrame::Box :矩形边框
  • QFrame::Panel :带有可点击区域的⾯板边框
  • QFrame::WinPanel :Windows⻛格的边框
  • QFrame::HLine :⽔平线边框
  • QFrame::VLine :垂直线边框
  • QFrame::StyledPanel :带有可点击区域的⾯板边框,但样式取决于窗⼝主题
    ![[Pasted image 20250420125026.png]]

2)编写widget.cpp,给这四个label设置属性.

    ui->label->setText("这是一段文本");ui->label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);

![[Pasted image 20250420125615.png]]

    ui->label->setText("这是一段文本");ui->label->setAlignment(Qt::AlignRight | Qt::AlignTop);

![[Pasted image 20250420125710.png]]

自动换行
![[Pasted image 20250420130002.png]]

	ui->label_2->setText("这是一段很长的文本这是一段很长的文本这是一段很长的文本这是一段很长的文本这是一段很长的文本这是一段很长的文本这是一段很长的文本");ui->label_2->setWordWrap(true);

![[Pasted image 20250420130102.png]]

    //设置缩进ui->label_3->setText("这是一段文本");ui->label_3->setIndent(50);

![[Pasted image 20250420130256.png]]

    //设置缩进ui->label_3->setText("这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本");ui->label_3->setIndent(50);ui->label_3->setWordWrap(true);

![[Pasted image 20250420130408.png]]

    //设置边距ui->label_4->setText("这是一段文本");ui->label_4->setMargin(50);

![[Pasted image 20250420130740.png]]

    //设置边距ui->label_4->setText("这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本这是一段文本");ui->label_4->setMargin(50);

![[Pasted image 20250420131008.png]]

代码⽰例:设置伙伴

1)创建两个label和两个radioButton.
objectName 分别问 label , label_2 , radioButton , radioButton_2
![[Pasted image 20250420131410.png]]

此处把label中的⽂本设置为"快捷键 &A"这样的形式.
其中&后⾯跟着的字符,就是快捷键.可以通过alt+A的⽅式来触发该快捷键.
但是注意,这⾥的快捷键和 QPushButton 的不同.需要搭配alt和单个字⺟的⽅式才能触发.

2)编写widget.cpp,设置buddy属性
当然这⾥也可以使⽤Qt Designer直接设置

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

3)运⾏程序,可以看到,按下快捷键alt+a或者alt+b,即可选中对应的选项.
![[Pasted image 20250420131747.png]]

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

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

相关文章

非参数检验题目集

非参数检验题目集 对医学计量资料成组比较&#xff0c;相对参数检验来说&#xff0c;非参数秩和检验的优点是&#xff08; &#xff09; A. 适用范围广 B. 检验效能高 C. 检验结果更准确 D. 充分利用资料信息 E. 不易出现假阴性错误 对于计量资料的比较&#xff0c;在满足参数…

libdxfrw库使用总结

在 Win11VS2022CMake 平台编译 libdxfrw 库的挑战与应对 在当今数字化设计与开发领域&#xff0c;高效处理 CAD 文件格式如 DXF 是众多项目的关键需求。libdxfrw 库作为一种功能强大的工具&#xff0c;能助力开发者精准解析与写入 DXF 文件&#xff0c;使其在众多应用场景中备…

C++学习:六个月从基础到就业——内存管理:RAII原则

C学习&#xff1a;六个月从基础到就业——内存管理&#xff1a;RAII原则 本文是我C学习之旅系列的第十九篇技术文章&#xff0c;也是第二阶段"C进阶特性"的第四篇&#xff0c;主要介绍C中的RAII原则及其在资源管理中的应用。查看完整系列目录了解更多内容。 引言 在…

【愚公系列】《Python网络爬虫从入门到精通》056-Scrapy_Redis分布式爬虫(Scrapy-Redis 模块)

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…

PyTorch基础笔记

PyTorch张量 多维数组&#xff1a;张量可以是标量&#xff08;0D&#xff09;、向量&#xff08;1D&#xff09;、矩阵&#xff08;2D&#xff09;或更高维的数据&#xff08;3D&#xff09;。 数据类型&#xff1a;支持多种数据类型&#xff08;如 float32, int64, bool 等&a…

OSCP - Proving Grounds - Sar

主要知识点 路径爆破cronjob 脚本劫持提权 具体步骤 依旧nmap 开始,开放了22和80端口 Nmap scan report for 192.168.192.35 Host is up (0.43s latency). Not shown: 65524 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp open ssh Open…

存储/服务器内存的基本概念简介

为什么写这个文章&#xff1f;今天处理一个powerstore 3000T 控制器&#xff0c;控制器上电后&#xff0c;亮一下灯就很快熄灭了&#xff0c;然后embedded module上和io module不加电&#xff0c;过一整子系统自动就下电了&#xff0c;串口没有任何输出。刚开始判断是主板的问题…

软件开发指南——GUI 开发方案推荐

1. LVGL (Light and Versatile Graphics Library) 适用场景&#xff1a;嵌入式设备、资源受限环境 优势&#xff1a; 专为嵌入式设计的开源 GUI 库&#xff0c;内存占用极小&#xff08;最低仅需 64KB RAM&#xff09;支持触摸屏、硬件加速&#xff08;如 STM32 的 LTDC&…

8 编程笔记全攻略:Markdown 语法精讲、Typora 编辑器全指南(含安装激活、基础配置、快捷键详解、使用技巧)

1 妙笔在手&#xff0c;编程无忧&#xff01; 1.1 编程为啥要做笔记&#xff1f;这答案绝了&#xff01; 嘿&#xff0c;各位键盘魔法师&#xff01;学编程不记笔记&#xff0c;就像吃火锅不配冰可乐 —— 爽到一半直接噎住&#xff01;你以为自己脑子是顶配 SSD&#xff0c;结…

LeetCode -- Flora -- edit 2025-04-16

1.两数之和 1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次相同的元素。 你可以按…

web后端语言下篇

#作者&#xff1a;允砸儿 #日期&#xff1a;乙巳青蛇年 三月廿一 笔者今天将web后端语言PHP完结一下&#xff0c;后面还会写一个关于python的番外。 PHP函数 PHP函数它和笔者前面写的js函数有些许类似&#xff0c;都是封装的概念。将实现某一功能的代码块封装到一个结构中…

LeetCode 259 题全解析:Swift 快速找出“满足条件”的三人组

文章目录 摘要描述示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a; 题解答案&#xff08;Swift&#xff09;题解代码分析示例测试及结果时间复杂度空间复杂度总结 摘要 本文围绕 LeetCode 259 题“较小的三数之和”&#xff0c;通过 Swift 给出两种解法&#xff0c;并…

第八节:React HooksReact 18+新特性-React Server Components (RSC) 工作原理

• 与SSR区别&#xff1a;零客户端JS、服务端数据直出 • 搭配Next.js 14使用场景 React Server Components (RSC) 工作原理及 Next.js 14 应用场景解析 一、RSC 核心工作原理 React Server Components (RSC) 是 React 18 引入的颠覆性特性&#xff0c;其设计目标是 服务端与…

万字解析TCP

通过学习视频加博客的组合形式&#xff0c;整理了一些关于TCP协议的知识。 *图源&#xff1a;临界~的csdn博客。 一、TCP建立连接 TCP的建立连接&#xff0c;大致可以分为面向连接、TCP报文结构、TCP的三次握手、TCP的建立状态、SYN泛洪攻击。 1.1、面向连接 面向连接 --- …

前端vue+typeScritp+elementPlus基础页面实现:

效果&#xff1a; 前端代码&#xff1a; index.vue: <template><el-container><el-main><el-card class"search-card" shadow"never"><transition :enter-active-class"proxy?.animate.searchAnimate.enter" :le…

微电网与分布式能源:智能配电技术的场景化落地

安科瑞顾强 随着数字化转型与能源革命的加速推进&#xff0c;电力系统正经历从传统模式向智能化、网络化方向的深刻变革。用户侧的智能配电与智能用电技术作为这一变革的核心驱动力&#xff0c;正在重塑电力行业的生态格局。本文将从技术架构、应用场景及未来趋势等维度&#…

绿幕抠图直播软件-蓝松抠图插件--使用相机直播,灯光需要怎么打?

使用SONY相机进行绿幕抠图直播时&#xff0c;灯光布置是关键&#xff0c;直接影响抠图效果和直播画质。以下是详细的灯光方案和注意事项&#xff1a; 一、绿幕灯光布置核心原则 均匀照明&#xff1a;绿幕表面光线需均匀&#xff0c;避免阴影和反光&#xff08;亮度差控制在0.5…

Linux Privilege Escalation: LD_PRELOAD

声明&#xff1a;本文所有操作需在授权环境下进行&#xff0c;严禁非法使用&#xff01; 0x01 什么是 LD_PRELOAD&#xff1f; LD_PRELOAD 是 Linux 系统中一个特殊的环境变量&#xff0c;它允许用户在程序启动时优先加载自定义的动态链接库&#xff08;.so 文件&#xff09;&…

程序性能(1)嵌入式基准测试工具

程序性能(1)嵌入式基准测试工具 Author&#xff1a;Once Day date: 2025年4月19日 漫漫长路&#xff0c;才刚刚开始… 全系列文档查看&#xff1a;Perf性能分析_Once-Day的博客-CSDN博客 参考文档: CPU Benchmark – MCU Benchmark – CoreMark – EEMBC Embedded Micropr…

ArrayList的subList的数据仍是集合

ArrayList的subList结果不可强转成ArrayList&#xff0c;否则会抛出 ClassCastException异常 • 级别&#xff1a; 【CRITICAL】 • 规约类型&#xff1a;BUG • 最坏影响&#xff1a; 程序错误&#xff0c;抛出异常 说明&#xff1a;subList 返回的是ArrayList的内部类SubL…