From 03dbba9a62ea6391639c54ccc89ea75d4a872597 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Thorbj=C3=B8rn=20Lund=20Martsum?= Date: Fri, 16 Mar 2012 07:00:45 +0100 Subject: [PATCH] QLayoutItem - make controlTypes a virtual function. Just implementing the ### Qt5 suggestion about making controlTypes a virtual function. Change-Id: Ic1db47fe488f089de965438e456e9b48e0b96f32 Reviewed-by: Girish Ramakrishnan Reviewed-by: Lars Knoll --- src/widgets/kernel/qlayout.cpp | 13 +++++++++++++ src/widgets/kernel/qlayout.h | 1 + src/widgets/kernel/qlayoutitem.cpp | 16 +++++----------- src/widgets/kernel/qlayoutitem.h | 4 ++-- tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp | 11 +++++++++++ 5 files changed, 32 insertions(+), 13 deletions(-) diff --git a/src/widgets/kernel/qlayout.cpp b/src/widgets/kernel/qlayout.cpp index 541350c..8c4e988 100644 --- a/src/widgets/kernel/qlayout.cpp +++ b/src/widgets/kernel/qlayout.cpp @@ -527,6 +527,19 @@ bool QLayout::isEmpty() const /*! \reimp */ +QSizePolicy::ControlTypes QLayout::controlTypes() const +{ + if (count() == 0) + return QSizePolicy::DefaultType; + QSizePolicy::ControlTypes types; + for (int i = count() - 1; i >= 0; --i) + types |= itemAt(i)->controlTypes(); + return types; +} + +/*! + \reimp +*/ void QLayout::setGeometry(const QRect &r) { Q_D(QLayout); diff --git a/src/widgets/kernel/qlayout.h b/src/widgets/kernel/qlayout.h index 5524443..9a13922 100644 --- a/src/widgets/kernel/qlayout.h +++ b/src/widgets/kernel/qlayout.h @@ -131,6 +131,7 @@ public: virtual int indexOf(QWidget *) const; virtual int count() const = 0; bool isEmpty() const; + QSizePolicy::ControlTypes controlTypes() const; int totalHeightForWidth(int w) const; QSize totalMinimumSize() const; diff --git a/src/widgets/kernel/qlayoutitem.cpp b/src/widgets/kernel/qlayoutitem.cpp index 814b807..8e08f5f 100644 --- a/src/widgets/kernel/qlayoutitem.cpp +++ b/src/widgets/kernel/qlayoutitem.cpp @@ -414,17 +414,6 @@ int QLayoutItem::heightForWidth(int /* w */) const */ QSizePolicy::ControlTypes QLayoutItem::controlTypes() const { - // ### Qt 5: This function should probably be virtual instead - if (const QWidget *widget = const_cast(this)->widget()) { - return widget->sizePolicy().controlType(); - } else if (const QLayout *layout = const_cast(this)->layout()) { - if (layout->count() == 0) - return QSizePolicy::DefaultType; - QSizePolicy::ControlTypes types; - for (int i = layout->count() - 1; i >= 0; --i) - types |= layout->itemAt(i)->controlTypes(); - return types; - } return QSizePolicy::DefaultType; } @@ -688,6 +677,11 @@ bool QWidgetItem::isEmpty() const return wid->isHidden() || wid->isWindow(); } +QSizePolicy::ControlTypes QWidgetItem::controlTypes() const +{ + return wid->sizePolicy().controlType(); +} + /*! \class QWidgetItemV2 \internal diff --git a/src/widgets/kernel/qlayoutitem.h b/src/widgets/kernel/qlayoutitem.h index 76aae6f..dacbf1e 100644 --- a/src/widgets/kernel/qlayoutitem.h +++ b/src/widgets/kernel/qlayoutitem.h @@ -83,7 +83,7 @@ public: Qt::Alignment alignment() const { return align; } void setAlignment(Qt::Alignment a); - QSizePolicy::ControlTypes controlTypes() const; + virtual QSizePolicy::ControlTypes controlTypes() const; protected: Qt::Alignment align; @@ -135,7 +135,7 @@ public: bool hasHeightForWidth() const; int heightForWidth(int) const; - + QSizePolicy::ControlTypes controlTypes() const; protected: QWidget *wid; }; diff --git a/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp b/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp index 764d777..6473764 100644 --- a/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp +++ b/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp @@ -52,6 +52,7 @@ #include #include #include +#include #include #include #include @@ -77,6 +78,7 @@ private slots: void layoutItemRect(); void warnIfWrongParent(); void controlTypes(); + void controlTypes2(); void adjustSizeShouldMakeSureLayoutIsActivated(); }; @@ -310,7 +312,16 @@ void tst_QLayout::controlTypes() QCOMPARE(layout.controlTypes(), QSizePolicy::DefaultType); QSizePolicy p; QCOMPARE(p.controlType(),QSizePolicy::DefaultType); +} +void tst_QLayout::controlTypes2() +{ + QWidget main; + QVBoxLayout *const layout = new QVBoxLayout(&main); + layout->setMargin(0); + QComboBox *combo = new QComboBox(&main); + layout->addWidget(combo); + QCOMPARE(layout->controlTypes(), QSizePolicy::ComboBox); } void tst_QLayout::adjustSizeShouldMakeSureLayoutIsActivated() -- 2.7.4