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 就会被选中. |
文本格式演示
图形化界面设置了3个Label
控件
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->label->setTextFormat(Qt::PlainText);
ui->label->setText("纯文本");
ui->label_2->setTextFormat(Qt::RichText);
ui->label_2->setText("<b>富文本</b>");
ui->label_3->setTextFormat(Qt::MarkdownText);
ui->label_3->setText("## markdown文本");
}
Widget::~Widget()
{
delete ui;
}
显示图片
显示图片,先用qrc
机制管理图片。
将QLabel
设置成和窗口一样大,并且把QLabel
左上角设置到窗口左上角
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//获取窗口尺寸
QRect windowRect = this->geometry();
ui->label->setGeometry(0, 0, windowRect.width(), windowRect.height());
//加载图片资源
QPixmap pixmap(":/logo.jpg");
ui->label->setPixmap(pixmap);
}
Widget::~Widget()
{
delete ui;
}
此时图片大小未填充满整个窗口,可以启动scaledContents
,自动拉伸填充图片
当我们拉动窗口大小的时候,图片还是固定大小,因为QLabel
是固定大小。在初始化的时候,只是将QLabel
尺寸设置成了和窗口一样,这个相当于是一次性的。
如果想让窗口大小实时发送改变,这里要和“事件”结合:
- Qt当中,表示用户的操作有两个概念,一个是信号,一个是事件
- 当用户拖拽修改窗口大小的时候,就会触发
resize
事件(resizeEvent
),我们拖拽的时候,是实时变化的,所有将窗口大小拖拽改变的时候,会触发一系列的resizeEvent
此时我们就可以Widget
窗口类重写QWidget
的resizeEvent
虚函数,在鼠标拖动窗口尺寸的过程当中,这个函数就会反复调用执行。
void Widget::resizeEvent(QResizeEvent *event)
{}
此处的形参是非常有用的,里面包含了触发resize
事件这一时刻,窗口尺寸的实时数值
这里并未调用
resizeEvent
,是Qt自己调用,我们这里重写虚函数,相当于给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);
//获取窗口尺寸
QRect windowRect = this->geometry();
ui->label->setGeometry(0, 0, windowRect.width(), windowRect.height());
//加载图片资源
QPixmap pixmap(":/logo.jpg");
//启动自动拉伸
ui->label->setScaledContents(true);
ui->label->setPixmap(pixmap);
}
Widget::~Widget()
{
delete ui;
}
void Widget::resizeEvent(QResizeEvent *event)
{
qDebug() << event->size();
ui->label->setGeometry(0, 0, event->size().width(), event->size().height());
}
文本对齐
在图形化界面,设置一个label
,然后添加一下边框,方便观察
这里面是按位或,通过位图的方式来进行设置:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//构造函数中, 给label设置不同的属性
ui->label->setText("水平垂直居中对齐");
ui->label->setAlignment(Qt::AlignCenter | Qt::AlignVCenter);
ui->label_2->setText("水平靠右垂直居中");
ui->label_2->setAlignment(Qt::AlignRight | Qt::AlignCenter);
ui->label_3->setText("右上角对齐");
ui->label_3->setAlignment(Qt::AlignRight | Qt::AlignTop);
}
Widget::~Widget()
{
delete ui;
}
自动换行、边距、缩进
此时文本的内容,并不是完整的
可以采用setWordWrap
设置自动换行:
采用setIndent
设置缩进,里面的参数表示缩进多少像素:
如果采用缩进+换行,后面的换行,都会进行缩进
采用setMargin
s设置边距
设置伙伴
可以将QLabel
和单选框或者复选框绑定为伙伴关系,然后通过QLabel
触发选中操作
绑定伙伴关系:
#include "widget.h"
#include "ui_widget.h"
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);
}
Widget::~Widget()
{
delete ui;
}
- Qt当中,
QLabel
中写的文本,可以指定快捷键,但是这个快捷键的规则功能比PushButton
弱很多 - 文本当中采用
&
跟上一个字符表示快捷键,比如说&A
,然后可以通过键盘的alt + a
来触发