diff options
author | Thorbjørn Lund Martsum <tmartsum@gmail.com> | 2012-08-10 15:24:33 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-07-10 09:26:31 +0200 |
commit | 692e642305e2c24883645bd56db491d031e97252 (patch) | |
tree | b1d5d522b9c50aa4b0bf99e2c2d8f05ac915176c /tests | |
parent | c92d1d8acdfb125ce8abfcd996ac151437e6f31d (diff) |
QSizePolicy - add retainSizeWhenHidden
Sometimes it is nice that hiding a widget does not affect the
layout. This patch makes that possible by allowing hidden
widgets to take up space.
Change-Id: Ifbc1cdee0e112950acc025919b98199ea9558db7
Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>
Reviewed-by: Thorbjørn Lund Martsum <tmartsum@gmail.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp | 43 | ||||
-rw-r--r-- | tests/manual/widgets/kernel/kernel.pro | 3 | ||||
-rw-r--r-- | tests/manual/widgets/kernel/sizeonhide/main.cpp | 134 | ||||
-rw-r--r-- | tests/manual/widgets/kernel/sizeonhide/sizeonhide.pro | 3 |
4 files changed, 181 insertions, 2 deletions
diff --git a/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp b/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp index 2b9b4fd761..ab2df2e250 100644 --- a/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp +++ b/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp @@ -84,6 +84,7 @@ private slots: void controlTypes(); void controlTypes2(); void adjustSizeShouldMakeSureLayoutIsActivated(); + void testRetainSizeWhenHidden(); }; tst_QLayout::tst_QLayout() @@ -350,5 +351,47 @@ void tst_QLayout::adjustSizeShouldMakeSureLayoutIsActivated() QCOMPARE(main.size(), QSize(200, 10)); } +void tst_QLayout::testRetainSizeWhenHidden() +{ + QWidget widget; + QBoxLayout layout(QBoxLayout::TopToBottom, &widget); + + QLabel *label1 = new QLabel("label1 text", &widget); + layout.addWidget(label1); + QLabel *label2 = new QLabel("label2 text", &widget); + layout.addWidget(label2); + + widget.show(); + QVERIFY(QTest::qWaitForWindowExposed(&widget)); + int normalHeight = widget.height(); + + // a. Verify that a removed visible will mean lesser size after adjust + label1->hide(); + widget.adjustSize(); + int heightWithoutLabel1 = widget.height(); + QVERIFY(heightWithoutLabel1 < normalHeight); + + // b restore with verify that the size is the same + label1->show(); + QCOMPARE(widget.sizeHint().height(), normalHeight); + + // c verify that a policy with retainSizeWhenHidden is respected + QSizePolicy sp_remove = label1->sizePolicy(); + QSizePolicy sp_retain = label1->sizePolicy(); + sp_retain.setRetainSizeWhenHidden(true); + + label1->setSizePolicy(sp_retain); + label1->hide(); + QCOMPARE(widget.sizeHint().height(), normalHeight); + + // d check that changing the policy to not wanting size will result in lesser size + label1->setSizePolicy(sp_remove); + QCOMPARE(widget.sizeHint().height(), heightWithoutLabel1); + + // e verify that changing back the hidden widget to want the hidden size will ensure that it gets more size + label1->setSizePolicy(sp_retain); + QCOMPARE(widget.sizeHint().height(), normalHeight); +} + QTEST_MAIN(tst_QLayout) #include "tst_qlayout.moc" diff --git a/tests/manual/widgets/kernel/kernel.pro b/tests/manual/widgets/kernel/kernel.pro index 4d26c9ee19..968d71724f 100644 --- a/tests/manual/widgets/kernel/kernel.pro +++ b/tests/manual/widgets/kernel/kernel.pro @@ -1,3 +1,2 @@ TEMPLATE = subdirs -SUBDIRS = qtooltip - +SUBDIRS = qtooltip sizeonhide diff --git a/tests/manual/widgets/kernel/sizeonhide/main.cpp b/tests/manual/widgets/kernel/sizeonhide/main.cpp new file mode 100644 index 0000000000..e8b95dfe28 --- /dev/null +++ b/tests/manual/widgets/kernel/sizeonhide/main.cpp @@ -0,0 +1,134 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Thorbjørn Martsum - tmartsum[at]gmail.com +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtWidgets module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtWidgets> + +class KeepSizeExampleDlg : public QDialog +{ + Q_OBJECT +public: + QGridLayout *gridLayout; + QHBoxLayout *horizontalLayout; + QVBoxLayout *verticalLayout; + QCheckBox *checkBox; + QCheckBox *checkBox2; + QCheckBox *checkBox3; + QCheckBox *checkBox4; + QGroupBox *groupBox; + QVBoxLayout *verticalLayout2; + QRadioButton *radioButton; + QRadioButton *radioButton2; + QRadioButton *radioButton3; + QTableView *tableView; + QPushButton *pushButton; + QSpacerItem *horizontalSpacer; + + KeepSizeExampleDlg() + { + QWidget *form = this; + form->resize(408, 295); + gridLayout = new QGridLayout(form); + horizontalLayout = new QHBoxLayout(); + verticalLayout = new QVBoxLayout(); + checkBox = new QCheckBox(form); + verticalLayout->addWidget(checkBox); + checkBox2 = new QCheckBox(form); + verticalLayout->addWidget(checkBox2); + checkBox3 = new QCheckBox(form); + verticalLayout->addWidget(checkBox3); + checkBox4 = new QCheckBox(form); + verticalLayout->addWidget(checkBox4); + horizontalLayout->addLayout(verticalLayout); + groupBox = new QGroupBox(form); + verticalLayout2 = new QVBoxLayout(groupBox); + radioButton = new QRadioButton(groupBox); + verticalLayout2->addWidget(radioButton); + radioButton2 = new QRadioButton(groupBox); + verticalLayout2->addWidget(radioButton2); + radioButton3 = new QRadioButton(groupBox); + verticalLayout2->addWidget(radioButton3); + horizontalLayout->addWidget(groupBox); + gridLayout->addLayout(horizontalLayout, 0, 0, 1, 2); + tableView = new QTableView(form); + gridLayout->addWidget(tableView, 1, 0, 1, 2); + pushButton = new QPushButton(form); + gridLayout->addWidget(pushButton, 2, 0, 1, 1); + horizontalSpacer = new QSpacerItem(340, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + gridLayout->addItem(horizontalSpacer, 2, 1, 1, 1); + checkBox->setText(QString::fromUtf8("CheckBox1")); + checkBox2->setText(QString::fromUtf8("CheckBox2")); + checkBox3->setText(QString::fromUtf8("CheckBox - for client A only")); + checkBox4->setText(QString::fromUtf8("CheckBox - also for client A")); + groupBox->setTitle(QString::fromUtf8("Mode")); + radioButton->setText(QString::fromUtf8("Mode 1")); + radioButton2->setText(QString::fromUtf8("Mode 2")); + radioButton3->setText(QString::fromUtf8("Mode 3")); + pushButton->setText(QString::fromUtf8("&Hide/Show")); + + QObject::connect(pushButton, SIGNAL(clicked()), this, SLOT(showOrHide())); + } + + protected slots: + void showOrHide() + { + if (checkBox3->isVisible()) { + checkBox3->hide(); + checkBox4->hide(); + } else { + checkBox3->show(); + checkBox4->show(); + } + } +}; + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + KeepSizeExampleDlg d; + QSizePolicy policyKeepSpace = d.checkBox3->sizePolicy(); + policyKeepSpace.setRetainSizeWhenHidden(true); + d.checkBox3->setSizePolicy(policyKeepSpace); + d.checkBox4->setSizePolicy(policyKeepSpace); + d.show(); + app.exec(); +} + +#include "main.moc" diff --git a/tests/manual/widgets/kernel/sizeonhide/sizeonhide.pro b/tests/manual/widgets/kernel/sizeonhide/sizeonhide.pro new file mode 100644 index 0000000000..1969392ab3 --- /dev/null +++ b/tests/manual/widgets/kernel/sizeonhide/sizeonhide.pro @@ -0,0 +1,3 @@ +TEMPLATE = app +SOURCES = main.cpp +QT += widgets core-private |