1. 程式人生 > >Qt之QLabel

Qt之QLabel

不同顏色 map() int ble code 關於 sheet 畫的 fun

簡述

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

是不是非常奇妙?常常我們要用好幾個控件來組合才幹實現的功能,就僅僅幾行HTML代碼就搞定了。。

何樂而不為。

圖像

首先我們構建一個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);

非常easy就一段代碼。我們能夠打開源代碼瞅瞅,到底setNum是怎樣實現的。

void QLabel::setNum(int num)
{
    QString str;
    str.setNum(num);
    setText(str);
}

就三行代碼,呵呵噠。。

。超簡單吧,我們要有一顆隨時看源代碼的心!

超鏈接

我們須要簡單使用標簽<a></a>寫一段簡單的HTML超鏈接代碼

方法一

比較簡單,直接調用setOpenExternalLinks(true)就可以。

pLabel->setText(QString("<a href = \"%1\">%2</a>").arg("http://blog.csdn.net/liang19890820").arg(QStringLiteral("一去丶二三裏")));
pLabel->setOpenExternalLinks(true);

方法二

聲明一個槽openUrl,將其與linkActivated信號關聯。

pLabel->setText(QString("<a href = \"%1\">%2</a>").arg("http://blog.csdn.net/liang19890820").arg(QStringLiteral("一去丶二三裏")));
connect(pLabel, SIGNAL(linkActivated(QString)), this, SLOT(openUrl(QString)));

void MainWindow::openUrl(const QString &link)
{
    QDesktopServices::openUrl(QUrl(link));
}

總結

通過上面的學習,我們基本將標簽的大部分使用方法都分享了。能夠看出HTML、CSS的重要性,所以不管你如今所從事的工作是什麽,或者以後做什麽,我都建議好好研究下Web,技多不壓身。。

。上面的內容雖多,但都非常easy,也非常重要。所以都須要掌握,我們不僅僅是Qter。我們更是工匠-精益求精、嚴謹、耐心。專註,堅持。

Qt之QLabel