diff options
-rw-r--r-- | src/gui/painting/qpainter.cpp | 6 | ||||
-rw-r--r-- | tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp | 12 |
2 files changed, 13 insertions, 5 deletions
diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 4a2898375e..40f2d10abb 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -7442,10 +7442,6 @@ start_lengthVariant: } } - // no need to do extra work for underlines if we don't paint - if (tf & Qt::TextDontPrint) - maxUnderlines = 0; - QList<QTextLayout::FormatRange> underlineFormats; int length = offset - old_offset; if ((hidemnmemonic || showmnemonic) && maxUnderlines > 0) { @@ -7460,7 +7456,7 @@ start_lengthVariant: --l; if (!l) break; - if (*cin != QLatin1Char('&') && !hidemnmemonic) { + if (*cin != QLatin1Char('&') && !hidemnmemonic && !(tf & Qt::TextDontPrint)) { QTextLayout::FormatRange range; range.start = cout - cout0; range.length = 1; diff --git a/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp b/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp index 3effeb895e..5c2c805506 100644 --- a/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp +++ b/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp @@ -64,6 +64,7 @@ private slots: void elidedMultiLengthF(); void inFontUcs4(); void lineWidth(); + void mnemonicTextWidth(); }; tst_QFontMetrics::tst_QFontMetrics() @@ -331,5 +332,16 @@ void tst_QFontMetrics::lineWidth() QVERIFY(smallFontMetrics.lineWidth() < bigFontMetrics.lineWidth()); } +void tst_QFontMetrics::mnemonicTextWidth() +{ + // QTBUG-41593 + QFont f; + QFontMetrics fm(f); + const QString f1 = "File"; + const QString f2 = "&File"; + + QCOMPARE(fm.size(Qt::TextShowMnemonic, f1), fm.size(Qt::TextShowMnemonic, f2)); + QCOMPARE(fm.size(Qt::TextHideMnemonic, f1), fm.size(Qt::TextHideMnemonic, f2)); +} QTEST_MAIN(tst_QFontMetrics) #include "tst_qfontmetrics.moc" |