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