diff --git a/src/Gui/CommandView.cpp b/src/Gui/CommandView.cpp
index b9327c41fb..47ead58c8d 100644
--- a/src/Gui/CommandView.cpp
+++ b/src/Gui/CommandView.cpp
@@ -70,6 +70,7 @@
#include "SceneInspector.h"
#include "DemoMode.h"
#include "TextureMapping.h"
+#include "Tools.h"
#include "Utilities.h"
#include "NavigationStyle.h"
@@ -1862,14 +1863,15 @@ void StdViewScreenShot::activated(int iMsg)
QFont font = painter.font();
font.setPointSize(20);
- int n = QFontMetrics(font).width(name);
+ QFontMetrics fm(font);
+ int n = QtTools::horizontalAdvance(fm, name);
int h = pixmap.height();
painter.setFont(font);
painter.drawText(8+appicon.width(), h-24, name);
font.setPointSize(12);
- int u = QFontMetrics(font).width(url);
+ int u = QtTools::horizontalAdvance(fm, url);
painter.setFont(font);
painter.drawText(8+appicon.width()+n-u, h-9, url);
diff --git a/src/Gui/DlgExpressionInput.cpp b/src/Gui/DlgExpressionInput.cpp
index 2c64c46e6b..6f7c299bc7 100644
--- a/src/Gui/DlgExpressionInput.cpp
+++ b/src/Gui/DlgExpressionInput.cpp
@@ -30,6 +30,7 @@
#include "DlgExpressionInput.h"
#include "ui_DlgExpressionInput.h"
#include "ExpressionCompleter.h"
+#include "Tools.h"
#include
#include
#include
@@ -124,7 +125,7 @@ void DlgExpressionInput::textChanged(const QString &text)
try {
//resize the input field according to text size
QFontMetrics fm(ui->expression->font());
- int width = fm.width(text) + 15;
+ int width = QtTools::horizontalAdvance(fm, text) + 15;
if (width < minimumWidth)
ui->expression->setMinimumWidth(minimumWidth);
else
diff --git a/src/Gui/DownloadItem.cpp b/src/Gui/DownloadItem.cpp
index b882df8e81..04cbbaa350 100644
--- a/src/Gui/DownloadItem.cpp
+++ b/src/Gui/DownloadItem.cpp
@@ -53,6 +53,7 @@
#include "MainWindow.h"
#include "FileDialog.h"
#include "ui_DlgAuthorization.h"
+#include "Tools.h"
using namespace Gui::Dialog;
@@ -100,7 +101,7 @@ SqueezeLabel::SqueezeLabel(QWidget *parent) : QLabel(parent)
void SqueezeLabel::paintEvent(QPaintEvent *event)
{
QFontMetrics fm = fontMetrics();
- if (fm.width(text()) > contentsRect().width()) {
+ if (Gui::QtTools::horizontalAdvance(fm, text()) > contentsRect().width()) {
QString elided = fm.elidedText(text(), Qt::ElideMiddle, width());
QString oldText = text();
setText(elided);
diff --git a/src/Gui/FileDialog.cpp b/src/Gui/FileDialog.cpp
index 7a982f4587..55377bdaad 100644
--- a/src/Gui/FileDialog.cpp
+++ b/src/Gui/FileDialog.cpp
@@ -45,6 +45,7 @@
#include "FileDialog.h"
#include "MainWindow.h"
#include "BitmapFactory.h"
+#include "Tools.h"
using namespace Gui;
@@ -779,8 +780,8 @@ void FileChooser::setFilter ( const QString& filter )
void FileChooser::setButtonText( const QString& txt )
{
button->setText( txt );
- int w1 = 2*button->fontMetrics().width(txt);
- int w2 = 2*button->fontMetrics().width(QLatin1String(" ... "));
+ int w1 = 2 * QtTools::horizontalAdvance(button->fontMetrics(), txt);
+ int w2 = 2 * QtTools::horizontalAdvance(button->fontMetrics(), QLatin1String(" ... "));
button->setFixedWidth( (w1 > w2 ? w1 : w2) );
}
diff --git a/src/Gui/MainWindow.cpp b/src/Gui/MainWindow.cpp
index bf89926d0b..d463acd077 100644
--- a/src/Gui/MainWindow.cpp
+++ b/src/Gui/MainWindow.cpp
@@ -116,6 +116,7 @@
#include "View3DInventor.h"
#include "View3DInventorViewer.h"
#include "DlgObjectSelection.h"
+#include "Tools.h"
FC_LOG_LEVEL_INIT("MainWindow",false,true,true)
@@ -1547,14 +1548,14 @@ QPixmap MainWindow::splashImage() const
QFont fontExe = painter.font();
fontExe.setPointSize(20);
QFontMetrics metricExe(fontExe);
- int l = metricExe.width(title);
+ int l = QtTools::horizontalAdvance(metricExe, title);
int w = splash_image.width();
int h = splash_image.height();
QFont fontVer = painter.font();
fontVer.setPointSize(12);
QFontMetrics metricVer(fontVer);
- int v = metricVer.width(version);
+ int v = QtTools::horizontalAdvance(metricVer, version);
int x = -1, y = -1;
QRegExp rx(QLatin1String("(\\d+).(\\d+)"));
diff --git a/src/Gui/ManualAlignment.cpp b/src/Gui/ManualAlignment.cpp
index 2deb44e8c3..d3e2c7aa73 100644
--- a/src/Gui/ManualAlignment.cpp
+++ b/src/Gui/ManualAlignment.cpp
@@ -67,6 +67,7 @@
#include "ManualAlignment.h"
#include "BitmapFactory.h"
#include "SoAxisCrossKit.h"
+#include "Tools.h"
using namespace Gui;
@@ -472,7 +473,7 @@ public:
QColor front;
front.setRgbF(0.8f, 0.8f, 0.8f);
- int w = fm.width(text);
+ int w = QtTools::horizontalAdvance(fm, text);
int h = fm.height();
QImage image(w,h,QImage::Format_ARGB32_Premultiplied);
diff --git a/src/Gui/PythonConsole.cpp b/src/Gui/PythonConsole.cpp
index e866055a76..18794e028f 100644
--- a/src/Gui/PythonConsole.cpp
+++ b/src/Gui/PythonConsole.cpp
@@ -49,6 +49,7 @@
#include "DlgEditorImp.h"
#include "FileDialog.h"
#include "MainWindow.h"
+#include "Tools.h"
#include
#include
@@ -524,7 +525,7 @@ void PythonConsole::OnChange( Base::Subject &rCaller,const char* sR
QFont font(fontFamily, fontSize);
setFont(font);
QFontMetrics metric(font);
- int width = metric.width(QLatin1String("0000"));
+ int width = QtTools::horizontalAdvance(metric, QLatin1String("0000"));
setTabStopWidth(width);
} else {
QMap::ConstIterator it = d->colormap.find(QString::fromLatin1(sReason));
diff --git a/src/Gui/QuantitySpinBox.cpp b/src/Gui/QuantitySpinBox.cpp
index 36a9e03da4..5708d4d0dd 100644
--- a/src/Gui/QuantitySpinBox.cpp
+++ b/src/Gui/QuantitySpinBox.cpp
@@ -41,6 +41,7 @@
#include "DlgExpressionInput.h"
#include "propertyeditor/PropertyItem.h"
#include "BitmapFactory.h"
+#include "Tools.h"
#include "Command.h"
#include
#include
@@ -830,7 +831,7 @@ QSize QuantitySpinBox::sizeHint() const
s = textFromValue(q);
s.truncate(18);
s += fixedContent;
- w = qMax(w, fm.width(s));
+ w = qMax(w, QtTools::horizontalAdvance(fm, s));
w += 2; // cursor blinking space
w += iconHeight;
@@ -860,7 +861,7 @@ QSize QuantitySpinBox::minimumSizeHint() const
s = textFromValue(q);
s.truncate(18);
s += fixedContent;
- w = qMax(w, fm.width(s));
+ w = qMax(w, QtTools::horizontalAdvance(fm, s));
w += 2; // cursor blinking space
w += iconHeight;
diff --git a/src/Gui/ReportView.cpp b/src/Gui/ReportView.cpp
index 207074f782..b9b4eaf23a 100644
--- a/src/Gui/ReportView.cpp
+++ b/src/Gui/ReportView.cpp
@@ -41,6 +41,7 @@
#include "BitmapFactory.h"
#include "MainWindow.h"
#include "Application.h"
+#include "Tools.h"
using namespace Gui;
using namespace Gui::DockWnd;
@@ -653,7 +654,7 @@ void ReportOutput::OnChange(Base::Subject &rCaller, const char * sR
QFont font(fontFamily, fontSize);
setFont(font);
QFontMetrics metric(font);
- int width = metric.width(QLatin1String("0000"));
+ int width = QtTools::horizontalAdvance(metric, QLatin1String("0000"));
setTabStopWidth(width);
}
else if (strcmp(sReason, "RedirectPythonOutput") == 0) {
diff --git a/src/Gui/SoTextLabel.cpp b/src/Gui/SoTextLabel.cpp
index ca562d19d2..8d254342d3 100644
--- a/src/Gui/SoTextLabel.cpp
+++ b/src/Gui/SoTextLabel.cpp
@@ -65,6 +65,7 @@
#include "SoTextLabel.h"
#include "SoFCInteractiveElement.h"
#include "BitmapFactory.h"
+#include "Tools.h"
using namespace Gui;
@@ -452,7 +453,7 @@ void SoFrameLabel::drawImage()
QStringList lines;
for (int i=0; i(w, fm.width(line));
+ w = std::max(w, QtTools::horizontalAdvance(fm, line));
lines << line;
}
diff --git a/src/Gui/TextEdit.cpp b/src/Gui/TextEdit.cpp
index f9f4cc7116..c890fdc252 100644
--- a/src/Gui/TextEdit.cpp
+++ b/src/Gui/TextEdit.cpp
@@ -32,6 +32,7 @@
#include "TextEdit.h"
#include "SyntaxHighlighter.h"
+#include "Tools.h"
using namespace Gui;
@@ -239,7 +240,7 @@ TextEditor::~TextEditor()
int TextEditor::lineNumberAreaWidth()
{
- return fontMetrics().width(QLatin1String("0000"))+10;
+ return QtTools::horizontalAdvance(fontMetrics(), QLatin1String("0000")) + 10;
}
void TextEditor::updateLineNumberAreaWidth(int /* newBlockCount */)
@@ -449,7 +450,7 @@ void TextEditor::OnChange(Base::Subject &rCaller,const char* sReaso
if (strcmp(sReason, "TabSize") == 0 || strcmp(sReason, "FontSize") == 0) {
int tabWidth = hPrefGrp->GetInt("TabSize", 4);
QFontMetrics metric(font());
- int fontSize = metric.width(QLatin1String("0"));
+ int fontSize = QtTools::horizontalAdvance(metric, QLatin1Char('0'));
setTabStopWidth(tabWidth * fontSize);
}
diff --git a/src/Gui/Tools.h b/src/Gui/Tools.h
new file mode 100644
index 0000000000..f09d11cbd3
--- /dev/null
+++ b/src/Gui/Tools.h
@@ -0,0 +1,54 @@
+/***************************************************************************
+ * Copyright (c) 2020 Werner Mayer *
+ * *
+ * This file is part of the FreeCAD CAx development system. *
+ * *
+ * This library is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU Library General Public *
+ * License as published by the Free Software Foundation; either *
+ * version 2 of the License, or (at your option) any later version. *
+ * *
+ * This library is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU Library General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Library General Public *
+ * License along with this library; see the file COPYING.LIB. If not, *
+ * write to the Free Software Foundation, Inc., 59 Temple Place, *
+ * Suite 330, Boston, MA 02111-1307, USA *
+ * *
+ ***************************************************************************/
+
+#ifndef GUI_TOOLS_H
+#define GUI_TOOLS_H
+
+#include
+
+namespace Gui {
+
+/*!
+ * \brief The QtTools class
+ * Helper class to reduce adding a lot of extra QT_VERSION checks to client code.
+ */
+class GuiExport QtTools {
+public:
+ static int horizontalAdvance(const QFontMetrics& fm, QChar ch) {
+#if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0)
+ return fm.horizontalAdvance(ch);
+#else
+ return fm.width(ch);
+#endif
+ }
+ static int horizontalAdvance(const QFontMetrics& fm, const QString& text, int len = -1) {
+#if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0)
+ return fm.horizontalAdvance(text, len);
+#else
+ return fm.width(text, len);
+#endif
+ }
+};
+
+} // namespace Gui
+
+#endif // GUI_TOOLS_H
diff --git a/src/Gui/ViewProviderAnnotation.cpp b/src/Gui/ViewProviderAnnotation.cpp
index 3c08140865..7859dc7c37 100644
--- a/src/Gui/ViewProviderAnnotation.cpp
+++ b/src/Gui/ViewProviderAnnotation.cpp
@@ -58,6 +58,7 @@
#include "Application.h"
#include "Document.h"
#include "Window.h"
+#include "Tools.h"
using namespace Gui;
@@ -493,7 +494,7 @@ void ViewProviderAnnotationLabel::drawImage(const std::vector& s)
QStringList lines;
for (std::vector::const_iterator it = s.begin(); it != s.end(); ++it) {
QString line = QString::fromUtf8(it->c_str());
- w = std::max(w, fm.width(line));
+ w = std::max(w, QtTools::horizontalAdvance(fm, line));
lines << line;
}
diff --git a/src/Gui/Widgets.cpp b/src/Gui/Widgets.cpp
index 158766e2e3..83a24b9875 100644
--- a/src/Gui/Widgets.cpp
+++ b/src/Gui/Widgets.cpp
@@ -54,6 +54,7 @@
#include "BitmapFactory.h"
#include "DlgExpressionInput.h"
#include "QuantitySpinBox_p.h"
+#include "Tools.h"
using namespace Gui;
using namespace App;
@@ -1191,7 +1192,7 @@ int PropertyListEditor::lineNumberAreaWidth()
++digits;
}
- int space = 3 + fontMetrics().width(QLatin1Char('9')) * digits;
+ int space = 3 + QtTools::horizontalAdvance(fontMetrics(), QLatin1Char('9')) * digits;
return space;
}
@@ -1398,8 +1399,8 @@ void LabelEditor::validateText(const QString& text)
void LabelEditor::setButtonText(const QString& txt)
{
button->setText(txt);
- int w1 = 2*button->fontMetrics().width(txt);
- int w2 = 2*button->fontMetrics().width(QLatin1String(" ... "));
+ int w1 = 2 * QtTools::horizontalAdvance(button->fontMetrics(), txt);
+ int w2 = 2 * QtTools::horizontalAdvance(button->fontMetrics(), QLatin1String(" ... "));
button->setFixedWidth((w1 > w2 ? w1 : w2));
}
diff --git a/src/Gui/iisTaskPanel/src/iisiconlabel.cpp b/src/Gui/iisTaskPanel/src/iisiconlabel.cpp
index f967eacc38..e80ec302f1 100644
--- a/src/Gui/iisTaskPanel/src/iisiconlabel.cpp
+++ b/src/Gui/iisTaskPanel/src/iisiconlabel.cpp
@@ -74,7 +74,11 @@ QSize iisIconLabel::minimumSizeHint() const
int w = 8 + px.width();
if (!myText.isEmpty()) {
QFontMetrics fm(myFont);
+#if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0)
+ w += fm.horizontalAdvance(myText);
+#else
w += fm.width(myText);
+#endif
h = qMax(h, 4+fm.height());
}
diff --git a/src/Mod/Part/Gui/TaskFaceColors.cpp b/src/Mod/Part/Gui/TaskFaceColors.cpp
index 1549e3ba22..ffb9209a1a 100644
--- a/src/Mod/Part/Gui/TaskFaceColors.cpp
+++ b/src/Mod/Part/Gui/TaskFaceColors.cpp
@@ -61,6 +61,7 @@
#include
#include
#include
+#include
#include
#include
@@ -408,7 +409,7 @@ void FaceColors::updatePanel()
int maxWidth = d->ui->labelElement->width();
QFontMetrics fm(d->ui->labelElement->font());
- if (fm.width(faces) > maxWidth) {
+ if (Gui::QtTools::horizontalAdvance(fm, faces) > maxWidth) {
faces = fm.elidedText(faces, Qt::ElideMiddle, maxWidth);
}
diff --git a/src/Mod/PartDesign/Gui/TaskChamferParameters.cpp b/src/Mod/PartDesign/Gui/TaskChamferParameters.cpp
index f36cec8fa3..51413f3185 100644
--- a/src/Mod/PartDesign/Gui/TaskChamferParameters.cpp
+++ b/src/Mod/PartDesign/Gui/TaskChamferParameters.cpp
@@ -44,6 +44,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -131,10 +132,10 @@ void TaskChamferParameters::setUpUI(PartDesign::Chamfer* pcChamfer)
ui->stackedWidget->setFixedHeight(ui->chamferSize2->sizeHint().height());
QFontMetrics fm(ui->typeLabel->font());
- int minWidth = fm.width(ui->typeLabel->text());
- minWidth = std::max(minWidth, fm.width(ui->sizeLabel->text()));
- minWidth = std::max(minWidth, fm.width(ui->size2Label->text()));
- minWidth = std::max(minWidth, fm.width(ui->angleLabel->text()));
+ int minWidth = Gui::QtTools::horizontalAdvance(fm, ui->typeLabel->text());
+ minWidth = std::max(minWidth, Gui::QtTools::horizontalAdvance(fm, ui->sizeLabel->text()));
+ minWidth = std::max(minWidth, Gui::QtTools::horizontalAdvance(fm, ui->size2Label->text()));
+ minWidth = std::max(minWidth, Gui::QtTools::horizontalAdvance(fm, ui->angleLabel->text()));
minWidth = minWidth + 5; //spacing
ui->typeLabel->setMinimumWidth(minWidth);
ui->sizeLabel->setMinimumWidth(minWidth);
diff --git a/src/Mod/Sketcher/Gui/SoDatumLabel.cpp b/src/Mod/Sketcher/Gui/SoDatumLabel.cpp
index 76af0787e0..9d416f336a 100644
--- a/src/Mod/Sketcher/Gui/SoDatumLabel.cpp
+++ b/src/Mod/Sketcher/Gui/SoDatumLabel.cpp
@@ -56,6 +56,7 @@
#include "SoDatumLabel.h"
#include
+#include
#define ZCONSTR 0.006f
@@ -116,7 +117,7 @@ void SoDatumLabel::drawImage()
QFontMetrics fm(font);
QString str = QString::fromUtf8(s[0].getString());
- int w = fm.width(str);
+ int w = Gui::QtTools::horizontalAdvance(fm, str);
int h = fm.height();
// No Valid text
diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp
index dccd9f0f04..b76d21e619 100644
--- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp
+++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp
@@ -94,6 +94,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -3471,7 +3472,7 @@ QImage ViewProviderSketch::renderConstrIcon(const QString &type,
boundingBoxes->push_back(labelBB);
}
- cursorOffset += qfm.width(labelStr);
+ cursorOffset += Gui::QtTools::horizontalAdvance(qfm, labelStr);
}
}
diff --git a/src/Mod/TechDraw/Gui/QGIView.cpp b/src/Mod/TechDraw/Gui/QGIView.cpp
index d2fbe33a15..056ddf7953 100644
--- a/src/Mod/TechDraw/Gui/QGIView.cpp
+++ b/src/Mod/TechDraw/Gui/QGIView.cpp
@@ -46,6 +46,7 @@
#include
#include
#include
+#include
#include
#include "Rez.h"
@@ -719,7 +720,7 @@ int QGIView::calculateFontPixelSize(double sizeInMillimetres)
int QGIView::calculateFontPixelWidth(const QFont &font)
{
// Return the width of digit 0, most likely the most wide digit
- return QFontMetrics(font).width(QChar::fromLatin1('0'));
+ return Gui::QtTools::horizontalAdvance(QFontMetrics(font), QChar::fromLatin1('0'));
}
const double QGIView::DefaultFontSizeInMM = 5.0;
diff --git a/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp b/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp
index d14fe4ad35..d18fb5b827 100644
--- a/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp
+++ b/src/Mod/TechDraw/Gui/QGIViewBalloon.cpp
@@ -48,6 +48,7 @@
#include
#include
#include
+#include
#include
#include
@@ -444,7 +445,7 @@ void QGIViewBalloon::updateBalloon(bool obtuse)
int pos = labelText.indexOf(QString::fromUtf8("|"));
labelText.replace(pos, 1, QString::fromUtf8(" "));
QFontMetrics fm(balloonLabel->getFont());
- balloonLabel->seps.push_back(fm.width((labelText.left(pos + 2))));
+ balloonLabel->seps.push_back(Gui::QtTools::horizontalAdvance(fm, labelText.left(pos + 2)));
balloonLabel->verticalSep = true;
}
}