[Interest] QTextLayout::isValidCursorPosition() gives different result in Qt 5.3.0 vs Qt 4.8.6?
John Weeks
john at wavemetrics.com
Tue Jul 15 19:53:11 CEST 2014
I don't know very much about QTextLayout...
With this code copied from our very large application, when qtext contains "A":
QTextLayout qLayout(qtext, f);
qLayout.beginLayout();
QTextLine qLine= qLayout.createLine(); // If there is no text left to be inserted into the layout, the QTextLine returned will not be valid (isValid() will return false).
haveLine= qLine.isValid();
if( haveLine ) {
qreal width= std::numeric_limits<double>::infinity(); //INFINITY;
qLine.setLineWidth(width); // everything on one line.
qLine.setPosition(QPointF(xPos, yPos)); // top/left of first character
}
qLayout.endLayout();
qDebug() << "qLayout.isValidCursorPosition(0) =" << qLayout.isValidCursorPosition(0);
qDebug() << "qLayout.isValidCursorPosition(1) =" << qLayout.isValidCursorPosition(1);
qDebug() << "qLayout.isValidCursorPosition(2) =" << qLayout.isValidCursorPosition(2);
When built with Qt 4.8.6, I get
qLayout.isValidCursorPosition(0) = true
qLayout.isValidCursorPosition(1) = false
qLayout.isValidCursorPosition(2) = false
whereas with Qt 5.3.0 I get
qLayout.isValidCursorPosition(0) = true
qLayout.isValidCursorPosition(1) = true
qLayout.isValidCursorPosition(2) = false
It seems like the Qt 5 output makes sense- the position after the last (only) character on the line should be a valid cursor position (that's where the next character typed will go, right?). But just in case this is a bug in Qt 5, I'd like to avoid changing the code to accommodate a bug...
-John Weeks
More information about the Interest
mailing list