From dcd79eebdbcbcb5e67b0456bdef3af8ea4a4dc4f Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Mon, 22 Jun 2015 11:30:48 +0200 Subject: [PATCH] QToolBarAreaLayout: replace inefficient QLists with QVector QToolBarAreaLayout{Item,Line} are larger than a void*, so holding them in QLists is needlessly inefficient. Worse, the code could come to depend on the fragile property of (inefficient) QLists that references to elements therein never are invalidated. Fix by marking the types primitive and movable, resp., and holding them in QVector instead. Change-Id: I4e68d4bee41040bf84302b8ce8295a11debded70 Reviewed-by: Olivier Goffart (Woboq GmbH) Reviewed-by: Lars Knoll --- src/widgets/widgets/qtoolbararealayout_p.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/widgets/widgets/qtoolbararealayout_p.h b/src/widgets/widgets/qtoolbararealayout_p.h index 29e836a8f4..a1ae68130c 100644 --- a/src/widgets/widgets/qtoolbararealayout_p.h +++ b/src/widgets/widgets/qtoolbararealayout_p.h @@ -132,10 +132,12 @@ public: int preferredSize; bool gap; }; +Q_DECLARE_TYPEINFO(QToolBarAreaLayoutItem, Q_PRIMITIVE_TYPE); class QToolBarAreaLayoutLine { public: + QToolBarAreaLayoutLine() {} // for QVector, don't use QToolBarAreaLayoutLine(Qt::Orientation orientation); QSize sizeHint() const; @@ -147,16 +149,15 @@ public: QRect rect; Qt::Orientation o; - QList toolBarItems; + QVector toolBarItems; }; +Q_DECLARE_TYPEINFO(QToolBarAreaLayoutLine, Q_MOVABLE_TYPE); class QToolBarAreaLayoutInfo { public: QToolBarAreaLayoutInfo(QInternal::DockPosition pos = QInternal::TopDock); - QList lines; - QSize sizeHint() const; QSize minimumSize() const; @@ -175,11 +176,13 @@ public: QRect itemRect(const QList &path) const; int distance(const QPoint &pos) const; + QVector lines; QRect rect; Qt::Orientation o; QInternal::DockPosition dockPos; bool dirty; }; +Q_DECLARE_TYPEINFO(QToolBarAreaLayoutInfo, Q_MOVABLE_TYPE); class QToolBarAreaLayout {