Qt QLabel内容太长多余内容显示省略号
在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则不作处理
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: Qt、Vc下用fopen打开中文名字的文件
- 下一篇: Qt上截取中英文混合字符串的指定长度内容