目录
1.QLabel
1.1 textFormat 文本类型
普通文本和富文本
Markdown格式
1.2 alignment 文本对齐方式
1.3 wordWrap 自动换行
1.4 indent 文本缩进
1.5 margin 边距
1.6 buddy,qlabel伙伴
1.7 pixmap图片 和 scaledContents自动填充
1.QLabel
功能:显示图片和文本
属性:
text | QLabel中的文本。 |
textFormat | 文本格式 Qt::PlainText :纯文本 Qt::RichText: 富文本、支持html标签 Qt::MarkdownText:markdown格式 Qt::AutoText:根据文本内容自动分析文本格式 |
pixmap | 设置QLabel内部包含的图片。 |
scaledContents | label内部图片 是否自动拉伸填充。 |
alignment | 文本对齐方式(水平/垂直居中对齐,左/右/上/下 对齐) |
wordWrap | 自动换行 文本长度超出Label显示范围,是否自动换行。 如果不自动换行,文本不能完全显示。 QLabel不提供滚动条,QTextEdit(多行编辑框)提供滚动条拖拽。 |
indent | 设置文本缩进。设置后,对label内的所有行都缩进,不只是首行缩进。 水平方向和垂直方向都生效。 而indent最多只是两个方向有效(具体哪两个⽅向有效取决于alignment对齐方式)。 |
margin | 内部⽂本和边框之间的边距。 不同于于indent文本缩进。 是上下左右四个方向都同时有效。 |
openExternalLinks | 是否允许打开⼀个外部的链接. (当QLabel⽂本内容包含url的时候涉及到) |
buddy | 给QLabel关联⼀个"伙伴" 这样点击QLabel时就能激活对应的伙伴 例如伙伴如果是⼀个QCheckBox 那么该QCheckBox就会被选中 |
1.1 textFormat 文本类型
文本格式
Qt::PlainText :纯文本
Qt::RichText: 富文本、支持html标签
Qt::MarkdownText:markdown格式
Qt::AutoText:根据文本内容自动分析文本格式
例:为label标签,设置不同的文本类型
观察<b>标签的对文本的修饰效果,和#在markdown类型中的显示效果
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->label_plaintext->setTextFormat(Qt::PlainText);
ui->label_plaintext->setText("<b>纯文本</b>");
ui->label_richtext->setTextFormat(Qt::RichText);
ui->label_richtext->setText("<b>富文本</b>");
ui->label_markdown->setTextFormat(Qt::MarkdownText);
ui->label_markdown->setText("# 带标题符的markdown");
}
Widget::~Widget()
{
delete ui;
}
普通文本和富文本
1. 普通文本
仅由字符(字母、数字、标点符号等)组成,是最基本的文字信息载体。
2. 富文本
使用word工具编辑的文件、就可以认为是富文本
富文本除了文字外,还包含多种格式和多媒体元素。
在格式方面,可以有不同的字体、字号、字体颜色、加粗、倾斜、下划线等样式,
还能设置段落格式,如缩进、行距等。
并且可以插入多媒体元素,像图片、视频、音频,以及超链接、表格、图表等。
Markdown格式
Markdown是一种轻量级的「标记语言」,提供各种特殊符号,表示不同的样式/格式。
- #表示标题
- 设置文本样式的符号:
1.2 alignment 文本对齐方式
- Qt::AlignLeft:左对齐。
- Qt::AlignRight:右对齐。
- Qt::AlignTop:顶部对齐
- Qt::AlignBottom:底部对齐。
- Qt::AlignVCenter:垂直居中。
- Qt::AlignHCenter:水平居中
- Qt::AlignCenter:水平和垂直都居中。
ui->label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//水平居中 |垂直居中
1.3 wordWrap 自动换行
wordWrap 自动换行:文本长度超出Label显示范围,是否自动换行。
如果不自动换行,文本不能完全显示。
QLabel不提供滚动条,QTextEdit(多行编辑框)提供滚动条拖拽。
//自动换行
ui->label_2->setText("长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长");
ui->label_2->setWordWrap(true);
1.4 indent 文本缩进
//intdent文本缩进
ui->label_3->setText("长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长");
ui->label_3->setIndent(50);
ui->label_3->setWordWrap(true);
1.5 margin 边距
ui->label_3->setText("长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长长");
ui->label_3->setIndent(50);//缩进50
ui->label_3->setWordWrap(true);//自动换行
ui->label_3->setMargin(50);//边距50
边距效果:设置label内上下左右空白部分的距离(边距),只有内部矩形部分能显示文本。
未设置边距的时:
设置边距后:
超出中间矩形区域的部分,不显示。
边距与缩进:
有边距、有缩进
有边距、无缩进
缩进是,在边距的基础上,再缩进。
1.6 buddy,qlabel伙伴
给QLabel关联⼀个"伙伴",这样点击QLabel时就能激活对应的伙伴。
例如伙伴如果是⼀个按钮(单选或复选按钮),按下快捷键,按钮会被选中。
绑定伙伴关系后,利用QLabel文本中的&符,为伙伴设置快捷键。
快捷键为:alt+指定字符。该字符label文本中&符,后的第一个字符。
ui->label->setBuddy(ui->radioButton);
ui->label_2->setBuddy(ui->radioButton_2);
1.7 pixmap图片 和 scaledContents自动填充
此时图片自动拉伸,铺满label:
重写resizeEvent虚函数,实现拖拽改变窗口大小的同时,改变QLabel的大小
可当窗口大小发生改变时,QLabel大小并不会随之变化:
- 原因:为QLabel设置大小,是在widget的构造函数中设置的,设置就只设置了这一次
- 虽然已经设置了label内的图片自动填充,可是label大小并没有改变,填充也没用。
Qt中表示用户操作的两类概念:信号、事件。
当拖拽修改窗口大小时,会触发resize事件。
resize这种事件,是一个连续的过程(从a一点点到b的过程),就会触发一系列的resize事件。
每触发一次resizeEvent事件,都会调用一次对应的虚函数。
- 解决方法:重写QWidget的resizeEvent虚函数。
- 原理:多态调用,实际会调用到子类Widget重写的虚函数。
回调函数设置方法
1.函数指针
2.函数对象
3.lambda
4.重写父类虚函数(框架内部拿着父类指针、调用虚函数(只要传参传的子类对象地址,就会实现多态调用))
5.Qt的信号槽
void Widget::resizeEvent(QResizeEvent* event)
{
qDebug()<< event->size();
ui->label->setGeometry(0,0,event->size().width(),event->size().height());
}