简述
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