summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/painting/qpainter.cpp6
-rw-r--r--tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp12
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"