class ZLabel : public QLabel
{
Q_OBJECT
public:
ZLabel(QWidget *parent = 0);
void wrapData(const QString& text);
};
QString SpliteText(const QFontMetrics& font, const QString& text, int nLabelSize)
{
int nTextSize = font.width(text);
if(nTextSize > nLabelSize){
int nPos = 0;
long nOffset = 0;
for (int i = 0; i < text.size(); i++){
nOffset += font.width(text.at(i));
if(nOffset > nLabelSize){
nPos = i;
break;
}
}
QString qstrLeftData = text.left(nPos);
QString qstrMidData = text.mid(nPos);
return qstrLeftData + "\n" + SpliteText(font, qstrMidData, nLabelSize);
}
return text;
}
ZLabel::ZLabel(QWidget *parent): QLabel(parent)
{
}
void ZLabel::wrapData(const QString& text)
{
QFontMetrics font(this->font());
int nTextSize = font.width(text);
int nLabelSize = this->width();
if(nTextSize > nLabelSize){
if(!text.isEmpty()){
int nCharacterWidth = font.width(text[0]);
if(nCharacterWidth > nLabelSize){//至少1个字符的宽度
setMinimumWidth(nCharacterWidth);
}
}
nLabelSize = this->width();
QString qstrData = SpliteText(font, text, nLabelSize);
QLabel::setText(qstrData);
return;
}
QLabel::setText(text);
}
调用:
ZLabel* pLabel = new ZLabel(this);
pLabel->setFixedWidth(50);
QString text = "123123123123123123";
pLabel->wrapData(text);