Qt常用控件之QLabel(一)

Qt常用控件之QLabel

🌟🌟hello,各位读者大大们你们好呀🌟🌟

🚀🚀系列专栏:【Qt的学习】

📝📝本篇内容:QLabel基本介绍;文本;设置图片

⬆⬆⬆⬆上一篇:Qt常用控件之按钮

💖💖作者简介:轩情吖,请多多指教(>> •̀֊•́ ) ̖́-

1.QLabel基本介绍

其实对于QLabel大家都是比较熟悉的,之前一直使用的,用来显示文本,但是它其实还是有很多的功能没有介绍,这些功能能让QLabel更加的实用。那就现在介绍一下它的一些属性(以函数列出,会更加好理解和使用)

函数声明 函数说明
QString text() const label中文本
Qt::TextFormat textFormat() const 展示文本使用的格式(Qt::PlainText 纯⽂本,Qt::RichText 富⽂本(⽀持 html 标签),Qt::MarkdownText markdown格式,Qt::AutoText 根据⽂本内容⾃动决定⽂本格式)
void setTextFormat(Qt::TextFormat) 设置文本格式
const QPixmap *pixmap() const 获取label中的图片
void setPixmap(const QPixmap &) 设置label中的图片
void setScaledContents(bool) 设为true表⽰内容⾃动拉伸填充,QLabel设为false则不会⾃动拉伸,默认是false
bool hasScaledContents() const 查看是否是自动拉伸
Qt::Alignment alignment() const 获取对其方式
void setAlignment(Qt::Alignment) 设置对其方式,可以设置⽔平和垂直⽅向如何对⻬
bool wordWrap() const 获取现在的状态是否是自动换行
void setWordWrap(bool on) 设为true内部的⽂本会⾃动换⾏,设为false则内部⽂本不会⾃动换⾏
int indent() const 获取当前文本缩进的像素大小
void setIndent(int) 设置文本缩进,单位是像素
int margin() const 获取当前边距的像素大小
void setMargin(int) 设置内部⽂本和边框之间的边距,单位是像素,不同于indent,margin是上下左右四个⽅向都同时有效
void setOpenExternalLinks(bool open) 是否允许打开⼀个外部的链接(当QLabel⽂本内容包含URL的时候涉及到)
void setBuddy(QWidget *buddy) 给 QLabel 关联⼀个 "伙伴" ,在label文本中设置快捷键,通过快捷键就能激活对应的伙伴,例如伙伴如果是⼀个QCheckBox,那么该QCheckBox就会被选中

2.文本

前面讲到了我们的文本的格式有三种,接下来就要详细的讲讲这三种文本

首先第一种纯文本就是最普通的文本;第二种富文本就是内容更丰富的文本,支持html格式,也就是网页的格式,例如我们的word中编辑的文本,其实也可以认为是富文本;第三种可能写博客的同学可能比较熟悉,markdown格式,我们现在写的博客在编辑状态就可以看清楚它的格式情况,如下图。第四种AutoText提供了各种不同的特殊符号,表示不同的格式

接下来我们通过Qt Creator三段文本来展示一下它们的不同

首先我们现在图形化界面放上三个label控件,分别对应三个文本格式

使用代码将文本格式分别设置,并且设置文本内容

看执行结果

可以看到我们的第三条文本出现了缺少,这主要是因为文本字体变大了,但是QLabel不提供自动滚轮条。有的控件可以,如QTextEdit。

我们可以拉大第三条的文本框即可

可以看到,#和< b >纯文本中就是单纯的文本,没有任何的作用

3.设置图片

接下来要讲的是pixmap属性,简单来说就是在文本中加入图片,那么跟图片有关,就需要使用qrc文件,将它导入进去。

我们完成一个功能,将图片撑满窗口

我们如果想要硬编码也可以,在图形化界面中查看窗口的宽高任何直接设置,但是一旦窗口发生变化就不方便了

接下来执行程序看一下

可以看到右边没有完全填满,因此我们就需要使用到之前讲到的另一个函数setScaledContents,将它设置为自动拉伸即可

但是现在其实面临另外一个小问题,就是假设你拉伸窗口,可以发现你的图片不会跟随着变化,有没有办法也让图片跟随着变化呢

这就要谈谈事件了,在Qt中,表示用户的操作有两类概念,一类是信号,一类是事件,当用户拖拽修改窗口大小的时候,就会触发resize事件(resizeEvent),像resize这样的事件是连续变化的,把窗口从A形状拖成B形状这个过程中,会触发一系列的resizeEvent

,此时就可以借助resizeEvent完成上面的功能

我们通过Widget窗口类来重写父类QWidget的resizeEvent虚函数

这个函数的参数能够传递窗口的调整大小信息

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"
#include <QResizeEvent>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    label=new QLabel(this);
    //获取窗口大小
    QRect rec=this->geometry();
    //给label进行设置同等大小的宽和高
    label->setGeometry(0,0,rec.width(),rec.height());
    //将图片设置进去
    QPixmap picture(":/itachi.png");
    label->setPixmap(picture);
    label->setScaledContents(true);

}

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

void Widget::resizeEvent(QResizeEvent *event)
{
    qDebug()<<event->size();
    label->setGeometry(0,0,event->size().width(),event->size().height());//将label的宽度不停的随着窗口大小改变
}
cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLabel>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void resizeEvent(QResizeEvent *event) override;

private:
    Ui::Widget *ui;
    QLabel* label;
};
#endif // WIDGET_H

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

在我们实际的编程过程中,指定回调函数有很多种写法,比如设置函数指针,设置仿函数,设置lambda,Qt的信号槽。还有这里的通过重写父类的虚函数,在框架中使用父类的指针调用这个函数,此时你创建了子类并重写了这个函数,在多态的机制下,实际执行的就是子类的函数了。
🌸🌸Qt常用控件之QLabel(一)大概就讲到这里啦,博主后续会继续更新更多Qt的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!如有小伙伴需要Qt的安装包可以私信我,你们的支持是博主坚持创作的动力!💪💪

相关推荐
m0_552200822 小时前
《UE5_C++多人TPS完整教程》学习笔记58 ——《P58 旋转奔跑动画(Rotate Running Animations)》
c++·游戏·ue5
汽车仪器仪表相关领域3 小时前
工业安全新利器:NHQT-4四合一检测线系统深度解析
网络·数据库·人工智能·安全·汽车·检测站·汽车检测
lypzcgf4 小时前
Coze源码分析-资源库-创建数据库-后端源码-安全与错误处理
数据库·安全·go·coze·coze源码分析·ai应用平台·agent平台
望获linux4 小时前
【实时Linux实战系列】实时安全 C++ 模式:无异常、预分配与自定义分配器
java·linux·服务器·开发语言·数据库·chrome·tomcat
码猩4 小时前
wordVSTO插件实现自动填充序号
开发语言·c#
TDengine (老段)4 小时前
TDengine 聚合函数 VAR_POP 用户手册
大数据·数据库·sql·物联网·时序数据库·tdengine·涛思数据
野木香4 小时前
tdengine笔记
开发语言·前端·javascript
青草地溪水旁4 小时前
设计模式(C++)详解—享元模式(1)
c++·设计模式·享元模式
不剪发的Tony老师5 小时前
SQLite Expert:一款功能强大的SQLite管理工具
数据库·sqlite