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的安装包可以私信我,你们的支持是博主坚持创作的动力!💪💪