Qt学习笔记(二十七):QLabel 的常用方法


一、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();                         // 启动动图

 对于设置动图,也可以用 setScaledContents 方法设置自动缩放动图,以填充 label 所有可用空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值