Make it obvious that adding a QLayout to QSplitter is not supported.
It does not make sense to add a QLayout to a QSplitter, since the splitter manages its child widgets in the same manner as a QLayout. The result of doing so is that the child widgets inside that layout will lead to the splitter and the layout fighting to position the child widgets. QSplitter::addWidget should be used to add widgets directly to the splitter instead. Change-Id: I640b463cae8673f87354d28636bff4dd3cfb9679 Reviewed-by: Samu Voutilainen <samu.voutilainen@gmail.com> Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>bb10
parent
b4dd6faac3
commit
61e0fa5d68
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in New Issue