Example #1
0
//! [2]
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;
            //! [2]
            //! [3]
        } 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();
    //! [3]

    //! [4]
    if (didElide != elided) {
        elided = didElide;
        emit elisionChanged(didElide);
    }
}
Example #2
0
void ElidedLabel::paintEvent(QPaintEvent *event)
{
	QLabel::paintEvent(event);
	
	QPainter painter(this);
	QFontMetrics fontMetrics = painter.fontMetrics();
	QRect cr = contentsRect();
	cr.adjust(margin(), margin(), -margin(), -margin());
	
	bool didElide = false;
	int lineSpacing = fontMetrics.lineSpacing();
	int x, y = x =cr.top()+(cr.height()-lineSpacing)/2;
	
	QTextLayout textLayout(mContent, painter.font());
	textLayout.beginLayout();
	forever {
		QTextLine line = textLayout.createLine();
		
		if (!line.isValid())
			break;
		
		line.setLineWidth(cr.width()+2*x);
		int nextLineY = y + lineSpacing;
		
		if (cr.height() >= nextLineY + lineSpacing) {
			line.draw(&painter, QPoint(x, y));
			y = nextLineY;
		} else {
			QString lastLine = mContent.mid(line.textStart());
			QString elidedLastLine = fontMetrics.elidedText(lastLine, Qt::ElideRight, cr.width());
			painter.drawText(QPoint(x, y + fontMetrics.ascent()), elidedLastLine);
			line = textLayout.createLine();
			didElide = line.isValid();
			break;
		}
	}
	textLayout.endLayout();
	
	if (didElide != mElided) {
		mElided = didElide;
		emit elisionChanged(didElide);
	}
}