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

相关推荐
一只自律的鸡35 分钟前
【MySQL】第二章 基本的SELECT语句
数据库·mysql
祁同伟.37 分钟前
【C++】多态
开发语言·c++
rechol37 分钟前
C++ 继承笔记
java·c++·笔记
從南走到北40 分钟前
智尚招聘求职小程序v1.0.23
微信小程序·小程序
朱嘉鼎2 小时前
C语言之可变参函数
c语言·开发语言
SunkingYang2 小时前
详细介绍C++中捕获异常类型的方式有哪些,分别用于哪些情形,哪些异常捕获可用于通过OLE操作excel异常
c++·excel·mfc·异常捕获·comerror
liliangcsdn2 小时前
如何使用python创建和维护sqlite3数据库
数据库·sqlite
北冥湖畔的燕雀5 小时前
C++泛型编程(函数模板以及类模板)
开发语言·c++
2501_915918415 小时前
掌握 iOS 26 App 运行状况,多工具协作下的监控策略
android·ios·小程序·https·uni-app·iphone·webview
知识分享小能手5 小时前
uni-app 入门学习教程,从入门到精通,uni-app基础扩展 —— 详细知识点与案例(3)
vue.js·学习·ui·微信小程序·小程序·uni-app·编程