summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDheerendra Purohit <[email protected]>2024-10-17 12:21:04 +0530
committerVolker Hilsheimer <[email protected]>2024-12-02 15:43:32 +0000
commit2ebca8cde1b71aeb63c6151a12844df5b4cd5fe4 (patch)
tree822463f438ee7bd637d333eb3b86afc08975382e
parentea1409afc1d13c30dac856cdb298a9d2a42f2abc (diff)
Add widgetAdded signal for QStackedWidget and QStackedLayout
Currently, there is no signal provided when a widget is added or inserted into QStackedWidget or QStackedLayout. Emit a signal whenever a widget is added or inserted into QStackedWidget or QStackedLayout. [ChangeLog][QtWidgets][QStackedWidget] The widgetAdded() signal emits whenever a widget is added or inserted into QStackedWidget or QStackedLayout. Fixes: QTBUG-122748 Change-Id: I3bf658346a5881665214a8d8f77975aa10e497c0 Reviewed-by: Volker Hilsheimer <[email protected]>
-rw-r--r--src/widgets/kernel/qstackedlayout.cpp12
-rw-r--r--src/widgets/kernel/qstackedlayout.h1
-rw-r--r--src/widgets/widgets/qstackedwidget.cpp14
-rw-r--r--src/widgets/widgets/qstackedwidget.h1
-rw-r--r--tests/auto/widgets/kernel/qstackedlayout/tst_qstackedlayout.cpp22
-rw-r--r--tests/auto/widgets/widgets/qstackedwidget/tst_qstackedwidget.cpp21
6 files changed, 71 insertions, 0 deletions
diff --git a/src/widgets/kernel/qstackedlayout.cpp b/src/widgets/kernel/qstackedlayout.cpp
index 04eacf1d414..979bc21067c 100644
--- a/src/widgets/kernel/qstackedlayout.cpp
+++ b/src/widgets/kernel/qstackedlayout.cpp
@@ -114,6 +114,17 @@ QLayoutItem* QStackedLayoutPrivate::replaceAt(int idx, QLayoutItem *newitem)
*/
/*!
+ \fn void QStackedLayout::widgetAdded(int index)
+
+ \since 6.9
+
+ This signal is emitted whenever a widget is added or inserted.
+ The widget's \a index is passed as parameter.
+
+ \sa addWidget(), insertWidget()
+*/
+
+/*!
Constructs a QStackedLayout with no parent.
This QStackedLayout must be installed on a widget later on to
@@ -204,6 +215,7 @@ int QStackedLayout::insertWidget(int index, QWidget *widget)
widget->hide();
widget->lower();
}
+ emit widgetAdded(index);
return index;
}
diff --git a/src/widgets/kernel/qstackedlayout.h b/src/widgets/kernel/qstackedlayout.h
index 91d7d1e9f57..5b5a8f283fa 100644
--- a/src/widgets/kernel/qstackedlayout.h
+++ b/src/widgets/kernel/qstackedlayout.h
@@ -57,6 +57,7 @@ public:
Q_SIGNALS:
void widgetRemoved(int index);
void currentChanged(int index);
+ void widgetAdded(int index);
public Q_SLOTS:
void setCurrentIndex(int index);
diff --git a/src/widgets/widgets/qstackedwidget.cpp b/src/widgets/widgets/qstackedwidget.cpp
index 9cecee2ef86..bd1eae4a19e 100644
--- a/src/widgets/widgets/qstackedwidget.cpp
+++ b/src/widgets/widgets/qstackedwidget.cpp
@@ -89,6 +89,18 @@ public:
*/
/*!
+ \fn void QStackedWidget::widgetAdded(int index)
+
+ \since 6.9
+
+ This signal is emitted whenever a widget is added or inserted.
+ The widget's \a index is passed as parameter.
+
+ \sa addWidget(), insertWidget()
+*/
+
+
+/*!
Constructs a QStackedWidget with the given \a parent.
\sa addWidget(), insertWidget()
@@ -102,6 +114,8 @@ QStackedWidget::QStackedWidget(QWidget *parent)
this, &QStackedWidget::widgetRemoved);
connect(d->layout, &QStackedLayout::currentChanged,
this, &QStackedWidget::currentChanged);
+ connect(d->layout, &QStackedLayout::widgetAdded,
+ this, &QStackedWidget::widgetAdded);
}
/*!
diff --git a/src/widgets/widgets/qstackedwidget.h b/src/widgets/widgets/qstackedwidget.h
index 49f2794ff4f..0c4e8ece80e 100644
--- a/src/widgets/widgets/qstackedwidget.h
+++ b/src/widgets/widgets/qstackedwidget.h
@@ -41,6 +41,7 @@ public Q_SLOTS:
Q_SIGNALS:
void currentChanged(int);
void widgetRemoved(int index);
+ void widgetAdded(int index);
protected:
bool event(QEvent *e) override;
diff --git a/tests/auto/widgets/kernel/qstackedlayout/tst_qstackedlayout.cpp b/tests/auto/widgets/kernel/qstackedlayout/tst_qstackedlayout.cpp
index c73b9725b2b..6e5e808ffd0 100644
--- a/tests/auto/widgets/kernel/qstackedlayout/tst_qstackedlayout.cpp
+++ b/tests/auto/widgets/kernel/qstackedlayout/tst_qstackedlayout.cpp
@@ -31,6 +31,7 @@ private slots:
void keepFocusAfterSetCurrent();
void heigthForWidth();
void replaceWidget();
+ void widgetAdded();
private:
QWidget *testWidget;
@@ -353,6 +354,27 @@ void tst_QStackedLayout::replaceWidget()
QCOMPARE(stackLayout->currentWidget(), replaceTo);
}
+
+void tst_QStackedLayout::widgetAdded()
+{
+ QStackedLayout stackedLayout;
+ QSignalSpy addSpy(&stackedLayout, &QStackedLayout::widgetAdded);
+ QVERIFY(addSpy.isValid());
+
+ stackedLayout.addWidget(new QWidget);
+ QCOMPARE(addSpy.count(), 1);
+ QCOMPARE(addSpy.at(0).at(0).toInt(), 0);
+
+ stackedLayout.insertWidget(1, new QWidget);
+ QCOMPARE(addSpy.count(), 2);
+ QCOMPARE(addSpy.at(1).at(0).toInt(), 1);
+
+ stackedLayout.insertWidget(100, new QWidget);
+ QCOMPARE(addSpy.count(), 3);
+ QCOMPARE(addSpy.at(2).at(0).toInt(), 2);
+}
+
+
QTEST_MAIN(tst_QStackedLayout)
#include "tst_qstackedlayout.moc"
diff --git a/tests/auto/widgets/widgets/qstackedwidget/tst_qstackedwidget.cpp b/tests/auto/widgets/widgets/qstackedwidget/tst_qstackedwidget.cpp
index 3c28ad324af..c61a464281b 100644
--- a/tests/auto/widgets/widgets/qstackedwidget/tst_qstackedwidget.cpp
+++ b/tests/auto/widgets/widgets/qstackedwidget/tst_qstackedwidget.cpp
@@ -10,6 +10,7 @@
#include <qpushbutton.h>
#include <QHBoxLayout>
#include <qlineedit.h>
+#include <QSignalSpy>
#include <QtWidgets/private/qapplication_p.h>
@@ -25,6 +26,7 @@ private slots:
void getSetCheck();
void testMinimumSize();
void dynamicPages();
+ void widgetAdded();
};
tst_QStackedWidget::tst_QStackedWidget()
@@ -172,5 +174,24 @@ void tst_QStackedWidget::dynamicPages()
}
+void tst_QStackedWidget::widgetAdded()
+{
+ QStackedWidget stackedWidget;
+ QSignalSpy addSpy(&stackedWidget, &QStackedWidget::widgetAdded);
+ QVERIFY(addSpy.isValid());
+
+ stackedWidget.addWidget(new QWidget);
+ QCOMPARE(addSpy.count(), 1);
+ QCOMPARE(addSpy.at(0).at(0).toInt(), 0);
+
+ stackedWidget.insertWidget(1, new QWidget);
+ QCOMPARE(addSpy.count(), 2);
+ QCOMPARE(addSpy.at(1).at(0).toInt(), 1);
+
+ stackedWidget.insertWidget(100, new QWidget);
+ QCOMPARE(addSpy.count(), 3);
+ QCOMPARE(addSpy.at(2).at(0).toInt(), 2);
+}
+
QTEST_MAIN(tst_QStackedWidget)
#include "tst_qstackedwidget.moc"