【Qt】常用控件QLabel

news2024/9/19 19:45:25

 常用控件QLabel

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

QLabel的属性

其核心属性如下:

属性说明

text

QLabel 中的⽂本

textFormat

⽂本的格式.

  • Qt::PlainText 纯⽂本
  • Qt::RichText 富⽂本(⽀持 html 标签)
  • Qt::MarkdownText markdown 格式
  • Qt::AutoText 根据⽂本内容⾃动决定⽂本格式.

pixmap

QLabel 内部包含的图⽚

scaledContents

设为 true 表⽰内容⾃动拉伸填充 QLabel

设为 false 则不会⾃动拉伸

alignment

对⻬⽅式.

可以设置⽔平和垂直⽅向如何对⻬.

wordWrap

设为 true 内部的⽂本会⾃动换⾏.

设为 false 则内部⽂本不会⾃动换⾏

indent

设置⽂本缩进. ⽔平和垂直⽅向都⽣效

margin

内部⽂本和边框之间的边距.

不同于于 indent, 但是是上下左右四个⽅向都同时有效.

⽽ indent 最多只是两个⽅向有效(具体哪两个⽅向有效取决于 alignment )

openExternalLinks

是否允许打开⼀个外部的链接.

(当 QLabel ⽂本内容包含 url 的时候涉及到)

buddy

给 QLabel 关联⼀个 "伙伴" , 这样点击 QLabel 时就能激活对应的伙伴。

例如伙伴如果是⼀个 QCheckBox, 那么该 QCheckBox 就会被选中。

关于testFormat

纯文本:最普通的文本

富文本:内容更丰富的文本,支持html(例如word工具,编辑的文件就可以认为是一种富文本)

markdown:是一个非常常用的书写文档的格式,提供了各种特殊符号,表示不同的样式/格式。

例子:显示不同格式的文本

<b>这是一段富文本</b>

使用<b>标签,表示文本加粗。

 如果将< b>标签加到纯文本中,只是被当成了单纯的文本,没有进行任何的渲染操作。

纯文本中,#只是被当成了文本"#"

在mark down中,# 是一级标题 

代码展示:

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

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

    //把第二个label文本设置成显示富文本
    ui->label_2->setTextFormat(Qt::RichText);
    ui->label_2->setText("<b>这是一段富文本</b>");

    //把第三个label文本设置成显示 markdown
    ui->label_3->setTextFormat(Qt::MarkdownText);
    ui->label_3->setText("# 这是一段 markdown 文本");

}

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

例子:显示图片

在代码中直接写固定数据,这样的做法称为“硬编码”。

窗口的尺寸为 800 * 600

QLabel的尺寸为 800 * 600

而图片的尺寸不一定是800*600

代码实现:

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //将QLabel设置成与窗口大小一致
    QRect windowrRect = this->geometry();
    //ui->label->setGeometry(0, 0, 800, 600);
    ui->label->setGeometry(0, 0, windowrRect.width(), windowrRect.height());
    //将图片导入到标签
    QPixmap pixmap(":/Qt.png");
    ui->label->setPixmap(pixmap);
    //自动拉伸属性
    ui->label->setScaledContents(true);
}

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

在刚才的代码中QLabel的尺寸设置是在构造函数里面,这种设置相当于是一次性的,一旦程序运行起来之后,QLabel的尺寸就固定下来了,窗口发生改变,此时,QLabel是不会变化的。

需要QLabel随着窗口的变化实时发生改变。

Qt中,表示用户的操作,有俩类操作,一类是信号,,一类是事件。

当用户拖拽修改窗口大小的时候,就会触发resize事件(resizeEvent)

像resize这样的事件,是连续变化的,把窗口尺寸从A拖到B这个过程中,会触发一系列的resizeEvent。

此时就可以借助resizeEvent来完成上述的功能。

即可以让Widget窗口类重写父类(QWidget的resizeEvent虚函数)

在鼠标拖动窗口的过程中这个虚函数就会被反复调用执行,每次触发一个resizeEvent事件都会调用一次对应的虚函数。

由于此处进行了函数重写,调用父类的虚函数就会实际调用到子类的对应的函数(多态)

此处的形参event是非常有用的,这里包含了触发resize事件这一时刻窗口的尺寸的数值

在实际编程中,指定回调函数其实存在多种方式:

(1)设置函数指针

(2)设置仿函数(函数对象)

(3)设置lambda

(4)通过重写父类虚函数(框架中拿着父类的指针调用这个函数,如果创建了子类重写了这个函数,在多态机制下,实际执行的就是子类的函数)

(5)Qt的信号槽

#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设置成与窗口大小一致
    QRect windowrRect = this->geometry();
    //ui->label->setGeometry(0, 0, 800, 600);
    ui->label->setGeometry(0, 0, windowrRect.width(), windowrRect.height());
    //将图片导入到标签
    QPixmap pixmap(":/Qt.png");
    ui->label->setPixmap(pixmap);
    //自动拉伸属性
    ui->label->setScaledContents(true);
}

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


void Widget::resizeEvent(QResizeEvent *event)
{
    qDebug() << event->size();
    ui->label->setGeometry(0, 0, event->size().width(), event->size().height());
}

例子:文本对齐、自动换行、缩进、边距

 在Qt Designer中设置四个label

 QFrame是QLabel的父类,其中frameShape属性用来设置边框性质

  • NoFrame:无边框
  • Box:矩形边框
  • panel:带有可点击区域的⾯板边框
  • WinPanel:Windows⻛格的边框
  • HLine:⽔平线边框
  • VLine:垂直线边框
  • StyledPanel:带有可点击区域的⾯板边框,但样式取决于窗⼝主题

编写widget.cpp,给四个label设置4个属性

| 在C++中是按位或

 

此处设置的缩进即使文本进行换行,后续的行也会产生缩进,不仅仅是首行缩进。

在前端中,CSS也能设置缩进,text-indent属性,首行缩进。

代码实现:

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //设置对齐方式
    ui->label->setText("这是一段文本");
    ui->label->setAlignment(Qt::AlignVCenter | Qt::AlignHCenter);

    //设置自动换行
    ui->label_2->setText("这是一段很长很长很长很长很长很长很长很长很长很长很长很长"
                         "很长很长很长很长很长很长很长很长很长很长很长很长很长很长"
                         "很长很长很长很长很长很长很长很长很长很长很长很长很长很长"
                         "的文本");
    ui->label_2->setWordWrap(true);

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

    //设置边距
    ui->label_4->setText("这是一段很长很长很长很长很长很长很长很长很长很长很长很长"
                         "很长很长很长很长很长很长很长很长很长很长很长很长很长很长"
                         "很长很长很长很长很长很长很长很长很长很长很长很长很长很长"
                         "的文本");
    ui->label_4->setWordWrap(true);
    ui->label_4->setMargin(60);
}

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

运⾏程序, 可以看到如下效果

  • 第⼀个 label 垂直⽔平居中
  • 第⼆个 label 设置了 wordWrap, 能够⾃动换⾏
  • 第三个 label 设置了 Indent, 左侧和上⽅和边框有间距. 右侧则没有.
  • 第四个 label 设置了 margin, 四个⽅向均有间距(图上仅体现出三个⽅向, 下⽅看不出来)

例子:设置伙伴

 

 运⾏程序, 可以看到, 按下快捷键 alt + a 或者 alt + b, 即可选中对应的选项

在Qt中,QLabel中写的文本,是可以指定“快捷键”,此处的快捷键的规则功能要比QPushButton弱很多,是在文本中使用& 跟上一个字符来表示快捷键。

比如:&A => 通过键盘上的alt + a来触发这个快捷键。

           &B => 通过键盘上的alt + b来触发这个快捷键。

绑定伙伴关系之后,通过快捷键就可以选中对应的单选按钮/复选按钮

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

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

相关文章

uniapp 页面跳转传参:父页面监听子页面传过来的数据

父页面 监听events事件 uni.navigateTo({url: "/components/watermark-camera",events: { // 重点重点重点重点重点重点重点重点getImages(data) { // 接收子页面抛出的 getImages 事件console.log("水印相机的照片&#xff1a;", data)}}})子页面 const …

人工智能和机器学习 3(复旦大学计算机科学与技术实践工作站)python机器学习、Pytorch库入门、d2l学习+<机器学习、神经网络————原理、理论>

前言 安装 — 动手学深度学习 2.0.0 documentation (d2l.ai)https://zh.d2l.ai/chapter_installation/index.html 安装 我们需要配置一个环境来运行 Python、Jupyter Notebook、相关库以及运行本书所需的代码&#xff0c;以快速入门并获得动手学习经验。 安装 Miniconda 最…

【css】水平对齐方式(justify、text-align、display: flex;)

一、justify 完整的属性名是 justify-contentjustify-content 用于定义位于同一行的项目在主轴&#xff08;通常是水平方向&#xff09;上的对齐方式。 center &#xff1a;居中start : 起始位置对齐&#xff08;左对齐&#xff09;end : 结束位置对齐&#xff08;右对齐&…

使用 LlamaIndex 中的 Relik 进行实体链接和关系提取

从文本构建知识图谱长期以来一直是一个令人着迷的研究领域。随着大型语言模型 (LLM) 的出现&#xff0c;该领域获得了更多主流关注。然而&#xff0c;LLM 的成本可能相当高。另一种方法是微调较小的模型&#xff0c;这种方法得到了学术研究的支持&#xff0c;可以产生更有效的解…

无线领夹麦克风哪个牌子好?最好的无线麦克风品牌排行推荐

伴随着智能手机的不断发展&#xff0c;手机不单单只是承担着联系的作用&#xff0c;凭借着小巧、出色拍摄体验等&#xff0c;成为了绝大部分朋友记录生活的绝佳选择&#xff0c;例如录制VLog、短视频等等。不过录制视频必然需要考虑到收音问题&#xff0c;因为在实际录制过程中…

Java面试八股之什么是消息队列的高并发缓冲

什么是消息队列的高并发缓冲 消息队列的高并发缓冲是指在处理大量并发请求时&#xff0c;通过消息队列来平滑处理请求的一种机制。这种机制可以帮助系统在高并发场景下保持稳定性和性能。 高并发缓冲的核心思想&#xff1a; 解耦&#xff1a; 消息队列作为一个中间层&#…

树莓派5 笔记26:ollama大型语言模型_中文输入法_Python_espeak文字转语音

今日继续学习树莓派5 8G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下&#xff1a; 下载大语言模型&#xff0c;下载中文输入法&#…

HTML+CSS+JS实现商城首页[web课设代码+模块说明+效果图]

系列文章目录 1.Web前端大作业htmlcss静态页面–掌****有限公司 2.Web前端大作业起点小说静态页面 3.Web前端大作业网易云页面 4.Web前端大作业商城页面 5.Web前端大作业游戏官网页面 6.Web前端大作业网上商城页面 7.HTMLCSS淘宝首页[web课设代码模块说明效果图] 8.HTMLCSSJS实…

Linux | 深入探究Linux进程控制:从fork函数到进程等待再到进程替换

目录 1、进程的创建&#xff1a;fork函数 2、父子进程的奇怪现象&#xff1a;为什么同一个地址有不同的值&#xff1f;——区分内存的虚拟地址和物理地址 代码&#xff1a;利用fork函数的返回值进行父子进程分流&#xff0c;执行不同的代码块 虚拟地址和物理地址&#xff1…

selenium学习记录

1、初识selenium 概述&#xff1a; Selenium是一个Web的自动化测试工具&#xff0c;最初是为网站自动化测试而开发的&#xff0c;类型像我们玩游戏用的按键精灵&#xff0c;可以按指定的命令自动操作&#xff0c;不同是Selenium 可以直接运行在浏览器上&#xff0c;它支持所有…

【java】RuoYiBootstrap多模块版本-登陆请求流程解析

登陆请求流程逻辑图 Created with Raphal 2.3.0 &#xff08;1&#xff09;登陆流程解析 &#xff08;2&#xff09;【接下来所有业务都受ShiroConfig配置所过滤】 模块&#xff1a;ruoyi-framework 位置&#xff1a;src/main/java 包名&#xff1a;com.ruoyi.framework.config…

【机器学习】CNN的数学基础

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 CNN的数学基础1. 引言2. 卷积运算2.1 连续卷积2.2 离散卷积2.3 互相关 3. 激活函…

【html+css 绚丽Loading】 - 000007 虚空灵瞳

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…

一条短视频变现23万!不上班也能赚钱的路子

AI助力&#xff0c;让创意在短视频界翻涌成金。 这个项目不仅展示了AI技术在内容创作上的巨大潜力&#xff0c;更为那些希望在短视频平台上实现快速变现的创作者提供了一条可行之路。 何以破局&#xff0c;唯有行动。 我们相信每个人都有机会成为AI时代的弄潮儿。 01 项目…

SSM无人共享棋牌室的设计与实现---附源码99858

目 录 1 绪论 1.1 研究背景 1.2 研究意义 1.3国内外研究或应用现状&#xff1a; 1.4论文结构与章节安排 2 无人共享棋牌室系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析…

轻松上手!2024年图片转PDF工具操作指南

图片以其直观、生动的特点&#xff0c;成为传递信息的重要载体&#xff1b;而PDF文件则凭借其跨平台兼容性等特点在文档保存、传输及展示方面展现出巨大优势。因此&#xff0c;将图片转化为PDF格式的需求日益增长。那么&#xff0c;图片转为pdf怎么弄这次我们一起来探索。 1.F…

使用git时出现的问题总结

问题1 fatal: Unable to create ‘V:/Web/Vue3_admin/.git/index.lock’: File exists. 解决方法 删除 .git文件中的 index.lock 问题2 error: open("~$数据库表格.xlsx"): Permission denied error: unable to index file ~$数据库表格.xlsx 解决&#xff1a;要…

SpringBean的实例化,后置处理器以及生命周期

目录 一.Bean实例化的基本流程&#xff1a; Bean对象----->BeanDefinition信息对象 BeanDefintion存储到一个名为beanDefinitionMap中 对象存储在一个名为singletonObjects的Map中 Bean实例化的基本流程&#xff1a; 二.Spring的后处理器 Bean工厂后处理器- BeanFacto…

【C++题解】1137 - 纯粹素数

欢迎关注本专栏《C从零基础到信奥赛入门级&#xff08;CSP-J&#xff09;》 问题&#xff1a;1137 - 纯粹素数 类型&#xff1a;自定义函数 题目描述&#xff1a; 纯粹素数是这样定义的&#xff1a;一个素数&#xff0c;去掉最高位&#xff0c;剩下的数仍为素数&#xff0c;…

23D题分析

AM 分析方法&#xff1a;FFT&#xff0c;fc/fcfm/fc-fm调幅系数&#xff1a;ma Am/Ac&#xff0c;信号幅度 除 直流偏置调制方式&#xff1a;先给m(t)加Am直流偏置&#xff0c;再乘载波调制&#xff0c;如图&#xff1a; 公式&#xff1a; 5. 波形&#xff1a; 调幅系数&…