1. 程式人生 > >QT QLabelde 使用技巧總結

QT QLabelde 使用技巧總結

align abcdefg abc contents line span int htm new

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)); }

QT QLabelde 使用技巧總結