From e624c2d9b0940f0abc24ef7685238299fec5c36e Mon Sep 17 00:00:00 2001 From: Andrew den Exter Date: Tue, 17 Apr 2012 17:28:50 +1000 Subject: [PATCH] Don't crash when calculating the implicit width of truncated lines. Remember to call beginLayout() on the QTextLayout before creating lines or the layout data won't be allocated. Change-Id: Ic344ca376fc25e38c50078135deb02dee3afc4f1 Reviewed-by: Chris Adams Reviewed-by: Yann Bodson --- src/quick/items/qquicktext.cpp | 3 ++- tests/auto/quick/qquicktext/tst_qquicktext.cpp | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp index 70a1551..f34c062 100644 --- a/src/quick/items/qquicktext.cpp +++ b/src/quick/items/qquicktext.cpp @@ -913,12 +913,13 @@ QRectF QQuickTextPrivate::setupTextLayout(qreal *const naturalWidth, qreal *cons QTextLayout widthLayout(layoutText.mid(characterCount), scaledFont); widthLayout.setTextOption(layout.textOption()); + widthLayout.beginLayout(); for (; unwrappedLineCount <= maxLineCount; ++unwrappedLineCount) { QTextLine line = widthLayout.createLine(); if (!line.isValid()) break; } - + widthLayout.endLayout(); *naturalWidth = qMax(*naturalWidth, widthLayout.maximumWidth()); } diff --git a/tests/auto/quick/qquicktext/tst_qquicktext.cpp b/tests/auto/quick/qquicktext/tst_qquicktext.cpp index 86de501..7ef232b 100644 --- a/tests/auto/quick/qquicktext/tst_qquicktext.cpp +++ b/tests/auto/quick/qquicktext/tst_qquicktext.cpp @@ -1582,18 +1582,20 @@ void tst_qquicktext::implicitSize() QFETCH(QString, wrap); QFETCH(QString, elide); QString componentStr = "import QtQuick 2.0\nText { " + "property real iWidth: implicitWidth; " "text: \"" + text + "\"; " "width: " + width + "; " "textFormat: " + format + "; " "wrapMode: " + wrap + "; " "elide: " + elide + "; " - "maximumLineCount: 1 }"; + "maximumLineCount: 2 }"; QQmlComponent textComponent(&engine); textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); QQuickText *textObject = qobject_cast(textComponent.create()); QVERIFY(textObject->width() < textObject->implicitWidth()); QVERIFY(textObject->height() == textObject->implicitHeight()); + QCOMPARE(textObject->property("iWidth").toReal(), textObject->implicitWidth()); textObject->resetWidth(); QVERIFY(textObject->width() == textObject->implicitWidth()); -- 2.7.4