自定义自适应内容的Label
来源:互联网 发布:tensorflow constant 编辑:程序博客网 时间:2024/05/16 04:38
头文件:
#ifndef ELIDEDLABEL_H#define ELIDEDLABEL_H#include <QFrame>#include <QRect>#include <QResizeEvent>#include <QString>#include <QWidget>class ElidedLabel : public QFrame{ Q_OBJECT Q_PROPERTY(QString text READ text WRITE setText) Q_PROPERTY(bool isElided READ isElided)public: ElidedLabel(QWidget *parent = 0); void setText(const QString &text); const QString & text() const { return content; } bool isElided() const { return elided; }protected: void paintEvent(QPaintEvent *event);signals: void elisionChanged(bool elided);private: bool elided; QString content;};#endif // TEXTWRAPPINGWIDGET_H
源文件:
#include <QPainter>#include <QTextLayout>#include <QDebug>ElidedLabel::ElidedLabel(QWidget *parent) : QFrame(parent) , elided(false){ setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);}void ElidedLabel::setText(const QString &newText){// setToolTip(newText); content = newText; update();}void ElidedLabel::paintEvent(QPaintEvent *event){ QFrame::paintEvent(event); QPainter painter(this); QFontMetrics fontMetrics = painter.fontMetrics(); bool didElide = false; int lineSpacing = fontMetrics.lineSpacing(); int y = 0; QTextLayout textLayout(content, painter.font()); textLayout.beginLayout(); forever { QTextLine line = textLayout.createLine(); if (!line.isValid()) break; line.setLineWidth(width()); int nextLineY = y + lineSpacing; if (height() >= nextLineY + lineSpacing) { line.draw(&painter, QPoint(0, y)); y = nextLineY; } else { QString lastLine = content.mid(line.textStart()); QString elidedLastLine = fontMetrics.elidedText(lastLine, Qt::ElideRight, width()); painter.drawText(QPoint(0, y + fontMetrics.ascent()), elidedLastLine); line = textLayout.createLine(); didElide = line.isValid(); break; } } textLayout.endLayout(); if (didElide != elided) { elided = didElide; emit elisionChanged(didElide); }}文本内容随着控件的大小改变,可获取改变前的文本。
下面附上改变文本长度的代码,适合各种控件:
QFont font(ui->_signIn->font());QFontMetrics fm(font);ui->_signIn->setText(fm.elidedText(QString(signIn.c_str()), Qt::ElideRight, ui->_signIn->width()));
- 自定义自适应内容的Label
- label根据填充的内容自适应
- Label文本内容自适应
- label宽度随着内容自适应
- 自适应label的宽度
- Label的文字自适应
- label的自适应
- iOS7 Label自适应文字内容大小
- ios 中内容label高度自适应
- iOS label根据显示内容自适应大小
- iOS label根据显示内容自适应大小
- Swift3.0 label内容高度自适应
- iOS label根据显示内容自适应大小
- 根据label的内容返回自定义cell的高度
- 文字自适应label的frame
- label中文字的自适应
- Masonry Label的宽度自适应
- ios label高度的自适应
- Oracle 正则表达式函数-REGEXP_SUBSTR
- HP VM的几个简单管理命令(update later)
- linux scatterlist
- HTTP超详细解析——04【缓存】
- ajax上传文件
- 自定义自适应内容的Label
- PHP中ob_start函数的使用说明
- vCenter中打开虚拟机报错:在主机当前连接状况下不允许执行该操作
- WAS 8.5在HP-UX Itanium上无法图形化安装启动IIM之解
- 开通CSDN 博客了
- HDU 4213 模拟
- HTTP超详细解析——05【代理】
- 【美丽的英文】我喜欢你是寂静的
- Python 3种启动方法: 交互式、python脚本、图形界面运行python