一、QLabel 的构造函数:
1、QLabel(QWidget * parent = 0, Qt::WindowFlags f = 0):创建 QLabel 控件时,指定其父对象,并设置其窗口属性(有默认值,可以不用设置);
2、QLabel(const QString & text, QWidget * parent = 0, Qt::WindowFlags f = 0):创建 QLabel 控件时,设置其中显示的文本,指定其父对象,已经设置其窗口属性;
// 创建一个 QLabel 控件
QLabel *label = new QLabel("The QLabel widget provides a text or image display.", this);
// 设置 QLabel 显示的位置,以及宽度和高度
label->setGeometry(10, 10, 100, 100);
二、QLabel 的常用方法和属性:
1、上面创建的 label 控件,默认情况下背景是透明的,我们可以为其设置背景颜色,以及前景颜色:
// 使用 Qt 样式表为控件设置背景颜色,和前景颜色
label->setStyleSheet("QLabel{background-color:red; color:white}");
2、可以看到,label 控件上的文本,默认不会换行,我们也可以设置其自动换行:
// 设置换行:保留完整单词;false 表示不换行;
label->setWordWrap(true);
// 也可以用属性 wordWrap 获取 label 控件是否设置了换行
bool isWrap = label->wordWrap();
3、可以看到 label 上文本默认的字体很小,我们可以设置其字体大小:
// 重置 label 的大小
label->resize(300, 100);
// 设置 label 上显示文本的字体
label->setFont(QFont("宋体", 18, QFont::Bold, true));
4、设置 label 上文本的对齐方式:
// 设置 label 上文本的对齐方式:居中对齐
label->setAlignment(Qt::AlignCenter);
// 可以通过 alignment 属性获取 label 的对齐方式
int align = label->alignment();
5、设置 label 上文本的缩进:
// 设置 label 上文本的缩进(以像素为单位)
label->setIndent(50);
// 获取 label 上文本的缩进
int indent = label->indent();
效果:文本距离左边框有 50 个像素的缩进;
5、设置 label 外边距:
// 设置 label 外边距:文本内容到边框的距离(以像素为单位)
label->setMargin(30);
// 获取 label 的外边距
int margin = label->margin();
6、设置 label 在显示文本时,应如何与用户输入交互:
// 设置 label 在显示文本时,应如何与用户输入交互。
// 如果标记包含 Qt::LinksAccessibleByKeyboard,则焦点策略也会自动设置为 Qt::StrongFocus。
// 如果 Qt::TextSelectableByKeyboard 被设置,那么焦点策略被设置为 Qt::ClickFocus。
// Qt::LinksAccessibleByMouse:可以用鼠标高亮显示和激活链接;(默认设置)
// Qt::LinksAccessibleByKeyboard:可以用键盘上的回车键(enter) 高亮显示和激活链接;
// Qt::NoTextInteraction:不允许与文本进行交互;
// Qt::TextSelectableByMouse:文本可以用鼠标选择,并允许复制;
// Qt::TextSelectableByKeyboard:允许用键盘上的光标选择文本;
// Qt::TextEditable:允许编辑;
// Qt::TextEditorInteraction:TextSelectableByMouse | TextSelectableByKeyboard | TextEditable;
// Qt::TextBrowserInteraction:TextSelectableByMouse | LinksAccessibleByMouse | LinksAccessibleByKeyboard;
label->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard);
7、设置选中文本:前提必须设置 textInteractionFlags 的值为 Qt::TextSelectableByMouse;
// 设置选中文本:从索引为 10 的字符开始,选中 20 个字符;
label->setSelection(10, 20);
// 获取 label 选中的文本
QString selectedText = label->selectedText();
qDebug() << selectedText;
// 获取第一个选中字符的索引,如果没有选中文本,则返回 -1;
int index = label->selectionStart();
qDebug() << QString::number(index);
8、设置 label 显示超链接:
// 设置 label 上显示的文本
label->setText("<a href=https://www.baidu.com>百度一下</a>");
默认情况下,label 会直接显示富文本,如下所示:
我们也可以通过设置文本格式将 html 显示为纯文本:
// 设置文本格式
// Qt::AutoText:默认格式;如果 Qt::mightBeRichText() 返回 true,则文本字符串解释为 Qt::RichText,否则解释为 Qt::明文。
// Qt::PlainText:显示纯文本字符串;html 会被解释为纯文本;
// Qt::RichText:显示富文本字符串;
label->setTextFormat(Qt::PlainText);
测试发现,默认情况下虽然 label 能够显示富文本,但并不能打开链接,因为还需要进行一个设置:
// 设置 QLabel 自动调用 QDesktopServices::openUrl() 方法来打开链接,
// 而不是发出 linkActivated() 信号。默认值为 false,即不能自动打开链接。
// 注意:textInteractionFlags 属性的值需要设置 LinksAccessibleByMouse 或 LinksAccessibleByKeyboard。
// 因为 LinksAccessibleByMouse 是默认值,所以我们不需要再去设置。
label->setOpenExternalLinks(true);
// 还可以通过属性 openExternalLinks 获取 label 是否设置了自动打开链接
bool isOpenExternalLinks = label->openExternalLinks();
三、槽函数:
1、void clear():清除 label 上的内容;
2、void setText(const QString &):设置 label 上显示的文本内容;
3、void setNum(int num) :将标签内容设置为包含整数的文本表示形式的纯文本;
4、void setNum(double num):将标签内容设置为包含双数字文本表示的纯文本;
5、void setPicture(const QPicture & picture):在 label 上设置图片;
我用下面代码加载一个图片资源:
QPicture pic;
pic.load(":/Image/Luffy.png");
label->setPicture(pic);
报错:QPicturePaintEngine::checkFormat: Incorrect header
这是因为 QPicture 只能加载 Qt 自生成特有的图画格式(以 .pic 为后缀的文件)。
6、void setPixmap(const QPixmap &):在 label 上设置图片;
// 在 label 上设置图片
label->setPixmap(QPixmap(":/Image/Luffy.png"));
默认情况下,如果图片的尺寸比 label 的尺寸大,那么图片不能在 label 上完全显示,如下:
此时我们通过 label 的一个属性进行设置:
// 设置 label 自动缩放其内容,以填充所有可用空间
label->setScaledContents(true);
// 获取 label 是否设置了自动缩放内容以填充所有可用空间
bool isScaled = label->hasScaledContents();
设置之后效果如下:
7、void setMovie(QMovie * movie):在 label 上显示动图(gif 文件);
QMovie *movie = new QMovie(this); // 创建一个动图对象
movie->setFileName(":/Image/mario.gif");// 加载一个动图
label->setMovie(movie); // 在 label 上设置动图
movie->start(); // 启动动图