From bbb284cd7073f7d9a668ff40fd111cf4b3b7975a Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Fri, 13 Jun 2025 10:35:01 +0200 Subject: [PATCH] QAccessibleWidget: replace QString default arg with overload We should not use defaulted arguments of non-trivial type, because their construction and destruction, even if not passed, is repeated at every call site, producing O(n) executable code. By overloading out-of-line, we execute the same code at runtime, but we have only one copy of the arg construction and destruction, in the library, O(1) executable code production. Found in API-review of QAccessibleWidgetV2. Amends the start of the public history. Can't pick further than (unreleased) 6.10, because this adds a new symbol. Task-number: QTBUG-98117 Change-Id: I705bca764992d9e7a2aa1021e0f94006b6817177 Reviewed-by: Volker Hilsheimer (cherry picked from commit ab53b1293122518a512335b94491566305280851) Reviewed-by: Qt Cherry-pick Bot --- src/widgets/accessible/qaccessiblewidget.cpp | 17 +++++++++++++---- src/widgets/accessible/qaccessiblewidget.h | 3 ++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/widgets/accessible/qaccessiblewidget.cpp b/src/widgets/accessible/qaccessiblewidget.cpp index 5c9c1fd80b9..036c5a8e823 100644 --- a/src/widgets/accessible/qaccessiblewidget.cpp +++ b/src/widgets/accessible/qaccessiblewidget.cpp @@ -153,15 +153,24 @@ public: /*! Creates a QAccessibleWidget object for widget \a w. - \a role and \a name are optional parameters that set the object's - role and name properties. + \a role is an optional parameter that sets the object's role property. */ -QAccessibleWidget::QAccessibleWidget(QWidget *w, QAccessible::Role role, const QString &name) +QAccessibleWidget::QAccessibleWidget(QWidget *w, QAccessible::Role role) : QAccessibleObject(w) { Q_ASSERT(widget()); d = new QAccessibleWidgetPrivate(); d->role = role; +} + +/*! + Creates a QAccessibleWidget object for widget \a w. + \a role and \a name are optional parameters that set the object's + role and name properties. +*/ +QAccessibleWidget::QAccessibleWidget(QWidget *w, QAccessible::Role role, const QString &name) + : QAccessibleWidget(w, role) +{ d->name = name; } @@ -490,7 +499,7 @@ QAccessibleWidgetV2::QAccessibleWidgetV2(QWidget *object, QAccessible::Role role } QAccessibleWidgetV2::QAccessibleWidgetV2(QWidget *object, QAccessible::Role role) - : QAccessibleWidgetV2(object, role, QString()) + : QAccessibleWidget(object, role) { } diff --git a/src/widgets/accessible/qaccessiblewidget.h b/src/widgets/accessible/qaccessiblewidget.h index 4317cfcf8f3..d11c034e141 100644 --- a/src/widgets/accessible/qaccessiblewidget.h +++ b/src/widgets/accessible/qaccessiblewidget.h @@ -19,7 +19,8 @@ class Q_WIDGETS_EXPORT QAccessibleWidget : public QAccessibleObject, public QAccessibleActionInterface { public: - explicit QAccessibleWidget(QWidget *o, QAccessible::Role r = QAccessible::Client, const QString& name = QString()); + explicit QAccessibleWidget(QWidget *o, QAccessible::Role r = QAccessible::Client); + explicit QAccessibleWidget(QWidget *o, QAccessible::Role r, const QString& name); bool isValid() const override; QWindow *window() const override;