Qt之显示控件(QLabel)

简述

QLabel用于显示文本或图像。没有提供用户交互功能。

标签的视觉外观可以通过各种方式进行配置,并且可以用于为另一个窗口小部件指定焦点助记键。

功能描述

QLabel可以包含以下任何内容类型:

内容 设置
纯文本 传递一个QString给setText()
富文本 传递一个包含富本文的QString给setText()
位图 传递一张QPixmap给setPixmap()
动画 传递一个QMovie给setMovie()
数字 传递一个int或double给setNum(),并转换为富文本
空内容 这是默认情况,和空的纯文本是一样的,可以通过clear()来实现

警告: 当将QString传递给构造函数或调用setText()时,请确认你输入的正确性,因为QLabel试图猜测它是将文本显示为纯文本还是富文本(HTML 4标记的子集)。当无法控制文本源(例如,当显示从Web加载的数据时)的时候,你可能需要显式调用setTextFormat()来指告诉QLabel输入信息的格式。

QLabel中的内容默认是垂直居中、水平左对齐,但我们有多种方式可以对其进行调整。

纯文本

显示文本

QLabel *label_0 = new QLabel;
label_0->setText("生死有命,富贵在天");

对齐与自动换行

    QLabel *label_1 = new QLabel;
    label_1->setText("我于杀戮之中盛放,亦如黎明中的花朵");
    label_1->setAlignment(Qt::AlignCenter);//对齐
	label_1->setWordWrap(true);//自动换行

设置行高

    QLabel *label_1 = new QLabel;
    label_1->setWordWrap(true);   
	QString strText = QStringLiteral("我于杀戮之中盛放,亦如黎明中的花朵。");
    QString strHeightText = "<p style=\"line-height:%1%\">%2<p>";
    strText = strHeightText.arg(100).arg(strText);
    label_1->setText(strText);

省略

    QLabel *label_1 = new QLabel;
	QString strText = QStringLiteral("我于杀戮之中盛放,亦如黎明中的花朵。");
    QString strElidedText = label_1->fontMetrics().elidedText(strText, Qt::ElideRight, 200, Qt::TextShowMnemonic);
    label_1->setText(strElidedText);

垂直显示

	QLabel *label_1 = new QLabel;
	QString strText = QStringLiteral("我于杀戮之中盛放,亦如黎明中的花朵。");
	label_1->setText(strText.split("", QString::SkipEmptyParts).join("\n"));
	label_1->setAlignment(Qt::AlignCenter);

设置伙伴控件

QLabel通常用作交互式窗口小部件的标签。对于此用途,QLabel提供了一种有用的机制来添加助记符(请参阅QKeySequence),该助记符会将键盘焦点设置到其他小部件(称为QLabel的“伙伴”)。

    QLineEdit *phoneEdit = new QLineEdit(this);
    QLabel *phoneLabel = new QLabel("&Phone:", this);
    phoneLabel->setBuddy(phoneEdit);

    QLineEdit *emailEdit = new QLineEdit(this);
    QLabel *emailLabel = new QLabel("&E-meil:", this);
    emailLabel->setBuddy(emailEdit);


    QGridLayout *gridLayout = new QGridLayout;
    gridLayout->addWidget(phoneLabel, 0, 0, 1, 1);
    gridLayout->addWidget(phoneEdit, 0, 1, 1, 1);
    gridLayout->addWidget(emailLabel, 1, 0, 1, 1);
    gridLayout->addWidget(emailEdit, 1, 1, 1, 1);

    this->setLayout(gridLayout);

在此示例中,当用户按下Alt + P时,键盘焦点转移到了标签的伙伴(QLineEdit)。如果伙伴是按钮(从QAbstractButton继承),则触发助记符将模拟按钮单击。

富文本

    QLabel *label = new QLabel;
    QString strHTML = QString("<html> \
                               <head> \
                               <style> \
                               font{color:green;} #f{font-size:18px; color: green;} \
                               </style> \
                               </head> \
                               <body>\
                               <font>%1</font><font id=\"f\">%2</font> \
                               <br/><br/> \
                               <img src=\":/picture/qqhead.png\" width=\"100\" height=\"100\"> \
                               </body> \
                               </html>").arg("I am ").arg("QQ");
    label->setText(strHTML);
    label->setAlignment(Qt::AlignCenter);

    QGridLayout *gridLayout = new QGridLayout;
    gridLayout->addWidget(label, 0, 0, 1, 1);

    this->setLayout(gridLayout);

图像

    QPixmap pixMap(":/picture/qqhead.png");
    QLabel *label = new QLabel;
    label->setPixmap(pixMap);
    label->setScaledContents(true);


    QGridLayout *gridLayout = new QGridLayout;
    gridLayout->addWidget(label, 0, 0, 1, 1);

    this->setLayout(gridLayout);

动画

    QPixmap pixMap(":/picture/qqhead.png");
    QLabel *label = new QLabel;
    label->setPixmap(pixMap);
    label->setScaledContents(true);

    QMovie *pMovie = new QMovie(":/picture/caixukun.gif");
    label->setMovie(pMovie);
    label->setScaledContents(true);
    pMovie->start();


    QGridLayout *gridLayout = new QGridLayout;
    gridLayout->addWidget(label, 0, 0, 1, 1);

    this->setLayout(gridLayout);

数字

    QPixmap pixMap(":/picture/qqhead.png");
    QLabel *label = new QLabel;
    label->setNum(0);
    QSlider *slider = new QSlider(Qt::Horizontal);


    QGridLayout *gridLayout = new QGridLayout;
    gridLayout->addWidget(label, 0, 0, 1, 1);
    gridLayout->addWidget(slider, 0, 1, 1, 1);

    this->setLayout(gridLayout);

    connect(slider, &QSlider::valueChanged, label, QOverload<int>::of(&QLabel::setNum));

注意:由于QLabel的槽函数setNum有int和double两个实现,所以这里采用了特殊的函数指针获取方法,这种方法在QSpin中也有用到。

超链接

方法一

    label->setText(QString("<a href = \"%1\">%2</a>").arg("https://blog.csdn.net/YinShiJiaW").arg(QStringLiteral("Shijia Shi")));
    label->setOpenExternalLinks(true);

方法二

    label->setText(QString("<a href = \"%1\">%2</a>").arg("https://blog.csdn.net/YinShiJiaW").arg(QStringLiteral("Shijia Yin")));
    connect(label, &QLabel::linkActivated, [=](QString link){
        QDesktopServices::openUrl(QUrl(link));
    });

引用

[1] Qt助手

[2] https://blog.csdn.net/liang19890820/article/details/50866096

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章