牛骨文教育服务平台(让学习变的简单)
博文笔记

Qt QLabel内容太长多余内容显示省略号

创建时间:2014-11-13 投稿人: 浏览次数:3830

在Label显示内容时常常遇到这种情况,比如要显示一个“abcdefghijklmnopqrstuvwxyz”字符串的Label,但是又不想显示全部,只想显示前面的abcedfg,后面的内容显示为"...",即把内容显示为“abcdefg...”

这时就可以用QFontMetrics 类来获取字体宽度,最后用elide的Text()函数处理字符串省略号,


实现代码如下:


mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtGui>
#include <QMainWindow>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    QString geteElidedText(QFont font, QString str, int MaxWidth);
private:
    QLabel *mpLbDemo1;
    QLabel *mpLbDemo2;
    QLabel *mpLbDemo3;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    setFixedSize(300,200);
    QWidget *widget = new QWidget;
    setCentralWidget(widget);

    QVBoxLayout *vLayout= new QVBoxLayout;

    mpLbDemo1 = new QLabel;
    mpLbDemo2 = new QLabel;
    mpLbDemo3 = new QLabel;

    QString strDemo = "abcdefghijklnmopqrstuvwxyz";

    mpLbDemo1->setText(strDemo);
    mpLbDemo1->setToolTip(strDemo);

    
    //调用函数,参数一为label的字体,参数二为要进行省略号处理的字符串,参数三为宽度
    QString streElide = geteElidedText(mpLbDemo2->font(),strDemo,60); 
    mpLbDemo2->setText(streElide);
    mpLbDemo2->setToolTip(strDemo);
    
    

    QString streElide2 = geteElidedText(mpLbDemo3->font(),"abcdef",60);
    mpLbDemo3->setText(streElide2);
    mpLbDemo3->setToolTip(strDemo);

    vLayout->addWidget(mpLbDemo1);
    vLayout->addWidget(mpLbDemo2);
    vLayout->addWidget(mpLbDemo3);

    widget->setLayout(vLayout);
}

/*****************************************
*字符串省略号处理函数,功能将字体为font的字符串
* 处理为当长度大于maxwidth时,大于部分显示为...
*****************************************/

QString MainWindow::geteElidedText(QFont font, QString str, int MaxWidth)
{

    QFontMetrics fontWidth(font);  
    int width = fontWidth.width(str);  //计算字符串宽度
    qDebug()<<"width of abcdefg"<<fontWidth.width("abcdefg...");  //qDebug获取"abcdefg..." 为60
    if(width>=MaxWidth)  //当字符串宽度大于最大宽度时进行转换
    {
        str = fontWidth.elidedText(str,Qt::ElideRight,MaxWidth);  //右部显示省略号
    }
    return str;   //返回处理后的字符串

}
MainWindow::~MainWindow()
{

}

运行效果如下,
mpLbDemo1显示为整串字符串,
mpLbDemo2当为当长度大于60时,后面部分显示为省略号
mpLbDemo3当字符串长度小于60则不作处理





声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。