summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Shaw <andy.shaw@digia.com>2012-08-07 06:31:38 +0200
committerQt by Nokia <qt-info@nokia.com>2012-08-20 10:28:51 +0200
commit9ea9ec1cbb567197ce0bf44ea58a79308c9b64d8 (patch)
tree3a1cda53f2a1295cb970f4c76968335d4585ac8d
parent85bd95cc318c0ad64aee892e2955b84f196a5d71 (diff)
downloadqtbase-9ea9ec1cbb567197ce0bf44ea58a79308c9b64d8.tar.gz
Ensure that all the children get the new stylesheet set on a parent
When a stylesheet was set on a parent widget then in some cases it would not get applied to all the child widgets. This was because the order of the children list may have been modified while it was being set on children. By making a copy of the list we prevent this from being a problem. Task-number: QTBUG-26321 Change-Id: Iea6bf72c69a0c39746f7ef5e7893dda5a93ed7e5 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
-rw-r--r--src/widgets/kernel/qwidget.cpp6
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp13
2 files changed, 16 insertions, 3 deletions
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index 9b4a4bdc12..d41e80fad0 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -2472,8 +2472,10 @@ void QWidgetPrivate::setStyle_helper(QStyle *newStyle, bool propagate, bool
}
if (propagate) {
- for (int i = 0; i < children.size(); ++i) {
- QWidget *c = qobject_cast<QWidget*>(children.at(i));
+ // We copy the list because the order may be modified
+ const QObjectList childrenList = children;
+ for (int i = 0; i < childrenList.size(); ++i) {
+ QWidget *c = qobject_cast<QWidget*>(childrenList.at(i));
if (c)
c->d_func()->inheritStyle();
}
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index f38a124f29..0c35107157 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -72,7 +72,7 @@
#include <qtableview.h>
#include <qtreewidget.h>
#include <qabstractnativeeventfilter.h>
-
+#include <qproxystyle.h>
#include <QtWidgets/QGraphicsView>
#include <QtWidgets/QGraphicsProxyWidget>
@@ -387,6 +387,7 @@ private slots:
void touchEventSynthesizedMouseEvent();
+ void styleSheetPropagation();
private:
bool ensureScreenSize(int width, int height);
QWidget *testWidget;
@@ -9513,5 +9514,15 @@ void tst_QWidget::touchEventSynthesizedMouseEvent()
}
}
+void tst_QWidget::styleSheetPropagation()
+{
+ QTableView tw;
+ tw.setStyleSheet("background-color: red;");
+ foreach (QObject *child, tw.children()) {
+ if (QWidget *w = qobject_cast<QWidget *>(child))
+ QCOMPARE(w->style(), tw.style());
+ }
+}
+
QTEST_MAIN(tst_QWidget)
#include "tst_qwidget.moc"