File indexing completed on 2024-05-12 04:20:16
0001 /** 0002 * SPDX-FileCopyrightText: 2001-2015 Klaralvdalens Datakonsult AB. All rights reserved. 0003 * 0004 * This file is part of the KD Chart library. 0005 * 0006 * SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #include <QApplication> 0010 #include <QWidget> 0011 #include <QDebug> 0012 #include <QBoxLayout> 0013 #include <QStyle> 0014 #include <QtTest/QtTest> 0015 #include <QGridLayout> 0016 #include <QLineEdit> 0017 0018 #define KDAB_REIMP 0019 0020 class MyLegendWidget : public QWidget 0021 { 0022 Q_OBJECT 0023 0024 public: 0025 explicit MyLegendWidget( QWidget* parent ) : QWidget( parent ) { 0026 } 0027 0028 void makeSizeFixed() { 0029 setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); // like Legend 0030 setFixedSize( 50, 50 ); // hmm Legend has a layout instead. 0031 //QGridLayout* layout = new QGridLayout( this ); 0032 // ... 0033 } 0034 0035 protected: 0036 KDAB_REIMP void resizeEvent( QResizeEvent* ) override { 0037 // Note that this is never called unless the widget is shown. 0038 qDebug() << "resizeEvent " << size(); 0039 } 0040 }; 0041 0042 class MyWidgetItem : public QWidgetItem 0043 { 0044 public: 0045 explicit MyWidgetItem(QWidget *w) : QWidgetItem(w) { } 0046 0047 KDAB_REIMP bool isEmpty() const override { return false; } 0048 }; 0049 0050 class TestQLayout : public QObject 0051 { 0052 Q_OBJECT 0053 0054 private Q_SLOTS: 0055 0056 // This is very much like KChart::Chart does with legends 0057 void testBoxLayoutHiddenWidget() { 0058 QBoxLayout* vLayout = new QVBoxLayout; 0059 MyLegendWidget* widget1 = new MyLegendWidget( nullptr ); 0060 widget1->resize( 10, 10 ); 0061 0062 // Adding a hidden widget doesn't work, the layout ignores it 0063 // This is why we created MyWidgetItem above, then the layout works 0064 //vLayout->addWidget( widget1 ); 0065 MyWidgetItem* widgetItem = new MyWidgetItem( widget1 ); 0066 vLayout->addItem( widgetItem ); 0067 0068 QRect geom( 100, 100, 800, 800 ); 0069 vLayout->setGeometry( geom ); 0070 0071 //vLayout->activate(); // not needed 0072 0073 QCOMPARE( vLayout->geometry(), geom ); 0074 qDebug() << "widget1: " << widget1->geometry(); 0075 QCOMPARE( widget1->geometry(), geom ); 0076 0077 delete widget1; 0078 delete vLayout; 0079 } 0080 0081 void testBoxLayoutChildWidget() { 0082 QWidget* topLevelWidget = new QWidget( nullptr ); 0083 // This time the layout is associated with a widget, like d->layout in KChart::Chart. 0084 QBoxLayout* vLayout = new QVBoxLayout( topLevelWidget ); 0085 MyLegendWidget* widget1 = new MyLegendWidget( topLevelWidget ); 0086 MyWidgetItem* widgetItem = new MyWidgetItem( widget1 ); 0087 vLayout->addItem( widgetItem ); 0088 //vLayout->activate(); 0089 0090 QRect geom( 100, 100, 800, 800 ); 0091 vLayout->setGeometry( geom ); 0092 qDebug() << "widget1: " << widget1->geometry(); 0093 // int marg = topLevelWidget->style()->pixelMetric( QStyle::PM_DefaultTopLevelMargin ); 0094 // int marg = vLayout->margin(); 0095 // QCOMPARE( widget1->geometry(), geom.adjusted(marg,marg,-marg,-marg) ); 0096 0097 geom = QRect( 10, 10, 80, 80 ); 0098 vLayout->setGeometry( geom ); 0099 qDebug() << "widget1: " << widget1->geometry(); 0100 //QCOMPARE( widget1->geometry(), geom.adjusted(marg,marg,-marg,-marg) ); 0101 0102 // And now let's show the widget for real 0103 geom = QRect( 0, 0, 500, 100 ); 0104 topLevelWidget->resize( geom.size() ); 0105 topLevelWidget->show(); 0106 QApplication::sendPostedEvents(); 0107 // QRect expected = geom.adjusted(marg,marg,-marg,-marg); 0108 // qDebug() << "widget1: " << widget1->frameGeometry() << "expecting" << expected; 0109 // this test is quite useless... 0110 //QCOMPARE( widget1->frameGeometry(), expected ); 0111 QVERIFY( widget1->isVisible() ); 0112 0113 delete topLevelWidget; 0114 } 0115 0116 void testSubGridLayout() { 0117 QWidget* topLevelWidget = new QWidget( nullptr ); 0118 QBoxLayout* vLayout = new QVBoxLayout( topLevelWidget ); 0119 QGridLayout* gridLayout = new QGridLayout(); 0120 0121 QLineEdit* lineEdit = new QLineEdit( topLevelWidget ); 0122 MyWidgetItem* lineEditWidgetItem = new MyWidgetItem( lineEdit ); 0123 gridLayout->addItem( lineEditWidgetItem, 0, 0 ); 0124 0125 MyLegendWidget* widget1 = new MyLegendWidget( topLevelWidget ); 0126 widget1->makeSizeFixed(); 0127 0128 MyWidgetItem* widgetItem = new MyWidgetItem( widget1 ); 0129 gridLayout->addItem( widgetItem, 1, 1 ); 0130 vLayout->addLayout( gridLayout ); 0131 0132 QRect geom( 100, 100, 800, 800 ); 0133 vLayout->setGeometry( geom ); 0134 qDebug() << "widget1: " << widget1->geometry(); 0135 QVERIFY( widget1->width() > 0 ); 0136 0137 delete topLevelWidget; 0138 } 0139 }; 0140 0141 QTEST_MAIN(TestQLayout) 0142 0143 #include "main.moc"