Qt之顯示控件(QLabel)

簡述

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章