summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/widgets/qsplitter.cpp9
-rw-r--r--tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp12
2 files changed, 19 insertions, 2 deletions
diff --git a/src/widgets/widgets/qsplitter.cpp b/src/widgets/widgets/qsplitter.cpp
index 794a824589..bbd5695e9b 100644
--- a/src/widgets/widgets/qsplitter.cpp
+++ b/src/widgets/widgets/qsplitter.cpp
@@ -917,6 +917,10 @@ QSplitterLayoutStruct *QSplitterPrivate::insertWidget(int index, QWidget *w)
When you hide() a child its space will be distributed among the
other children. It will be reinstated when you show() it again.
+ \note Adding a QLayout to a QSplitter is not supported (either through
+ setLayout() or making the QSplitter a parent of the QLayout); use addWidget()
+ instead (see example above).
+
\sa QSplitterHandle, QHBoxLayout, QVBoxLayout, QTabWidget
*/
@@ -1207,8 +1211,11 @@ int QSplitter::count() const
void QSplitter::childEvent(QChildEvent *c)
{
Q_D(QSplitter);
- if (!c->child()->isWidgetType())
+ if (!c->child()->isWidgetType()) {
+ if (c->type() == QEvent::ChildAdded && qobject_cast<QLayout *>(c->child()))
+ qWarning("Adding a QLayout to a QSplitter is not supported.");
return;
+ }
QWidget *w = static_cast<QWidget*>(c->child());
if (c->added() && !d->blockChildAdd && !w->isWindow() && !d->findWidget(w)) {
d->insertWidget_helper(d->list.count(), w, false);
diff --git a/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp b/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp
index 51132e2116..7f2033f527 100644
--- a/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp
+++ b/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp
@@ -93,7 +93,7 @@ private slots:
void task169702_sizes();
void taskQTBUG_4101_ensureOneNonCollapsedWidget_data();
void taskQTBUG_4101_ensureOneNonCollapsedWidget();
-
+ void setLayout();
private:
void removeThirdWidget();
void addThirdWidget();
@@ -770,5 +770,15 @@ void tst_QSplitter::taskQTBUG_4101_ensureOneNonCollapsedWidget()
QVERIFY(s.sizes().at(0) > 0);
}
+void tst_QSplitter::setLayout()
+{
+ QSplitter splitter;
+ QVBoxLayout layout;
+ QTest::ignoreMessage(QtWarningMsg, "Adding a QLayout to a QSplitter is not supported.");
+ splitter.setLayout(&layout);
+ // It will work, but we don't recommend it...
+ QCOMPARE(splitter.layout(), &layout);
+}
+
QTEST_MAIN(tst_QSplitter)
#include "tst_qsplitter.moc"