[LyX/2.3.x] Replace QFontMetrics::width() by horizontalAdvance() in Qt>=5.11

Jean-Marc Lasgouttes lasgouttes at lyx.org
Thu Dec 17 10:07:08 UTC 2020


commit f4314b6461ad4434c4c9dd294dfe62d1879ea6ea
Author: Jean-Marc Lasgouttes <lasgouttes at lyx.org>
Date:   Sat Oct 24 19:29:34 2020 +0200

    Replace QFontMetrics::width() by horizontalAdvance() in Qt>=5.11
    
    The method horizontalAdvance() replaces width() starting with Qt 5.11.
    To handle this, all direct calls to QFontMetrics::width() are replaced
    by calls to GuiFontMetrics::width(), and the code for
    GuiFontMetrics::width(QChar) uses horizontalAdvance on newer Qt
    versions.
    
    (cherry picked from commit 21422dd6527754d8b7876a6e11b686cd726321ed)
---
 src/frontends/qt4/GuiFontExample.cpp |    9 +++++----
 src/frontends/qt4/GuiFontMetrics.cpp |    7 +++++++
 src/frontends/qt4/PanelStack.cpp     |    4 ++--
 status.23x                           |    1 +
 4 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/src/frontends/qt4/GuiFontExample.cpp b/src/frontends/qt4/GuiFontExample.cpp
index cb27b5f..8a4ca13 100644
--- a/src/frontends/qt4/GuiFontExample.cpp
+++ b/src/frontends/qt4/GuiFontExample.cpp
@@ -11,6 +11,7 @@
 #include <config.h>
 
 #include "GuiFontExample.h"
+#include "GuiFontMetrics.h"
 
 #include <QPainter>
 #include <QPaintEvent>
@@ -28,20 +29,20 @@ void GuiFontExample::set(QFont const & font, QString const & text)
 
 QSize GuiFontExample::sizeHint() const
 {
-	QFontMetrics m(font_);
-	return QSize(m.width(text_) + 10, m.ascent() + m.descent() + 6);
+	lyx::frontend::GuiFontMetrics m(font_);
+	return QSize(m.width(text_) + 10, m.maxHeight() + 6);
 }
 
 
 void GuiFontExample::paintEvent(QPaintEvent *)
 {
 	QPainter p;
-	QFontMetrics m(font_);
+	lyx::frontend::GuiFontMetrics m(font_);
 
 	p.begin(this);
 	p.setFont(font_);
 	p.drawRect(0, 0, width() - 1, height() - 1);
-	p.drawText(5, 3 + m.ascent(), text_);
+	p.drawText(5, 3 + m.maxAscent(), text_);
 	p.end();
 }
 
diff --git a/src/frontends/qt4/GuiFontMetrics.cpp b/src/frontends/qt4/GuiFontMetrics.cpp
index 33fcf30..3df1bc9 100644
--- a/src/frontends/qt4/GuiFontMetrics.cpp
+++ b/src/frontends/qt4/GuiFontMetrics.cpp
@@ -563,10 +563,17 @@ int GuiFontMetrics::width(char_type c) const
 	if (value != outOfLimitMetric)
 		return value;
 
+#if QT_VERSION >= 0x050b00
+	if (is_utf16(c))
+		value = metrics_.horizontalAdvance(ucs4_to_qchar(c));
+	else
+		value = metrics_.horizontalAdvance(toqstr(docstring(1, c)));
+#else
 	if (is_utf16(c))
 		value = metrics_.width(ucs4_to_qchar(c));
 	else
 		value = metrics_.width(toqstr(docstring(1, c)));
+#endif
 
 	width_cache_.insert(c, value);
 
diff --git a/src/frontends/qt4/PanelStack.cpp b/src/frontends/qt4/PanelStack.cpp
index c61c8e0..e81d58c 100644
--- a/src/frontends/qt4/PanelStack.cpp
+++ b/src/frontends/qt4/PanelStack.cpp
@@ -13,6 +13,7 @@
 #include "PanelStack.h"
 
 #include "GuiApplication.h"
+#include "GuiFontMetrics.h"
 #include "qt_helpers.h"
 
 #include "support/debug.h"
@@ -21,7 +22,6 @@
 #include <QAbstractButton>
 #include <QApplication>
 #include <QComboBox>
-#include <QFontMetrics>
 #include <QGroupBox>
 #include <QHideEvent>
 #include <QHash>
@@ -118,7 +118,7 @@ void PanelStack::addCategory(QString const & name, QString const & parent)
 
 	panel_map_[name] = item;
 
-	QFontMetrics fm(list_->font());
+	GuiFontMetrics fm(list_->font());
 
 	// calculate the real size the current item needs in the listview
 	int itemsize = fm.width(qt_(name)) + 10 + list_->indentation() * depth;
diff --git a/status.23x b/status.23x
index fd6995e..1b5350f 100644
--- a/status.23x
+++ b/status.23x
@@ -100,3 +100,4 @@ What's new
 
 * BUILD/INSTALLATION
 
+- Remove use of deprecated Qt methods.


More information about the lyx-cvs mailing list