QLabel提供了一個文本或圖像的顯示,沒有提供用戶交互功能。
一個QLabel可以包含以下任意內容類型:
內容 | 設置 |
---|---|
純文本 | 使用setText()設置一個QString |
富文本 | 使用setText()設置一個富文本的QString |
圖像 | 使用setPixmap()設置一個圖像 |
動畫 | 使用setMovie()設置一個動畫 |
數字 | 使用setNum()設置int或double,並轉換為純文本。 |
Nothing | 空的純文本,默認的,使用clear()設置 |
首先我們構造一個QLabel對象,其中this為其所在的父窗體。通過調用setText可以為標簽設置文本(Hello World),這時標簽就可以正常顯示出來了。為了顯示更佳的效果,我們可以通過調用setStyleSheet來設置樣式。color: white-顧名思義,就是為標簽設置一個文本色(紅色)。
QLabel *pLabel = new QLabel(this); pLabel->setText("Hello World"); pLabel->setStyleSheet("color: white");
對齊方式
默認的標簽文本對齊方式為:左對齊、垂直居中,我們可以通過setAlignment來設置,包括:左、上、右、下、居中對齊,一般情況,我們會進行兩兩組合(水平方向、垂直方向)。
比如:居中對齊
setAlignment(Qt::AlignCenter);
使用樣式表來控制(水平居右、垂直居下):
setStyleSheet("qproperty-alignment: 'AlignBottom | AlignRight';");
自動換行
如果文本過長,我們可以采用自動換行的方式來顯示。
setWordWrap(true);
注意:當使用英文的時候,如果寫為類似形式”abcdefghijklmnopqrstuvwxyz”則是不能換行的,why?因為中間沒有空格,所以需要寫為”abcde fghij klmno pqrst uvwxyz”。
設置行高
一般情況下,自動換行之后文本上下行會距離比較近,我們可以通過下面方式來設置行高。
pLabel->setWordWrap(true); QString strText = QStringLiteral("一去二三里,煙村四五家。亭台六七座,八九十枝花。"); QString strHeightText = "<p style=\"line-height:%1%\">%2<p>"; strText = strHeightText.arg(150).arg(strText); pLabel->setText(strText);
省略
如果過長,我們又不想換行,只想把其中一部分省略為…,那么我們可以通過QFontMetrics來實現,這里先不介紹QFontMetrics,感興趣的童鞋可以先自行研究。
QString strText = QStringLiteral("今天的天氣真好! 陽光明媚 心情疏朗。");
QString strElidedText = pLabel->fontMetrics().elidedText(strText, Qt::ElideRight, 200, Qt::TextShowMnemonic);
pLabel->setText(strElidedText);
垂直顯示
默認情況下,文本顯示方式為水平方向,如果我們需要在垂直方向上顯示,需要用一些小技巧來處理。
QString strText = QStringLiteral("今天的天氣真好! 陽光明媚 心情疏朗。"); pLabel->setText(strText.split("", QString::SkipEmptyParts).join("\n")); pLabel->setAlignment(Qt::AlignCenter);
富文本
我們可以在助手中查找關於Using HTML Markup in Text Widgets
的資料,查看Qt支持哪些HTML標記。
下面我們來寫一段HTML代碼,O(∩_∩)O哈哈~。。。顯示不同顏色的文本以及圖片
QString strHTML = QString("<html> \ <head> \ <style> \ font{color:white;} #f{font-size:18px; color: green;} \ </style> \ </head> \ <body>\ <font>%1</font><font id=\"f\">%2</font> \ <br/><br/> \ <img src=\":/Images/logo\" width=\"100\" height=\"100\"> \ </body> \ </html>").arg("I am a ").arg("Qter"); pLabel->setText(strHTML); pLabel->setAlignment(Qt::AlignCenter);
圖像
首先我們構建一個QPixmap來作為顯示的圖片,然后設置標簽的大小,可以通過setScaledContents按比例縮放圖片達到理想的效果。
QPixmap pixmap(":/Images/logo"); pLabel->setPixmap(pixmap); pLabel->setFixedSize(100, 100); pLabel->setScaledContents(true);
動畫
這里我們需要使用另外一個類QMovie來控制動畫,start()可以進行播放與stop()則可以停止,也可以通過調用setSpeed()來設置動畫的播放速度。
QMovie *pMovie = new QMovie(":/Images/movie"); pLabel->setMovie(pMovie); pLabel->setFixedSize(135, 200); pLabel->setScaledContents(true); pMovie->start();
數字
如果我們需要顯示一個數字,則可以調用setNum(),他可以將內容轉換為純文本。
pLabel->setNum(66.6);
超鏈接
我們需要簡單使用標簽<a></a>
寫一段簡單的HTML超鏈接代碼
方法一
比較簡單,直接調用setOpenExternalLinks(true)即可。
pLabel->setText(QString("<a href = \"%1\">%2</a>").arg("https://i.cnblogs.com/EditPosts.aspx?opt=1").arg(QStringLiteral("博客園 王會喜"))); pLabel->setOpenExternalLinks(true);
方法二
聲明一個槽openUrl,將其與linkActivated信號關聯。
pLabel->setText(QString("<a href = \"%1\">%2</a>").arg("https://i.cnblogs.com/EditPosts.aspx?opt=1").arg(QStringLiteral("博客園 王會喜"))); connect(pLabel, SIGNAL(linkActivated(QString)), this, SLOT(openUrl(QString))); void MainWindow::openUrl(const QString &link) { QDesktopServices::openUrl(QUrl(link)); }