diff options
Diffstat (limited to 'src/templates/qquicktabbar.cpp')
-rw-r--r-- | src/templates/qquicktabbar.cpp | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/src/templates/qquicktabbar.cpp b/src/templates/qquicktabbar.cpp index 1c8cc435..a2fc1e11 100644 --- a/src/templates/qquicktabbar.cpp +++ b/src/templates/qquicktabbar.cpp @@ -35,6 +35,7 @@ ****************************************************************************/ #include "qquicktabbar_p.h" +#include "qquicktabbutton_p.h" #include "qquickcontainer_p_p.h" QT_BEGIN_NAMESPACE @@ -66,13 +67,26 @@ class QQuickTabBarPrivate : public QQuickContainerPrivate Q_DECLARE_PUBLIC(QQuickTabBar) public: - QQuickTabBarPrivate() - { - } - + void updateCurrentItem(); + void updateCurrentIndex(); void updateLayout(); }; +void QQuickTabBarPrivate::updateCurrentItem() +{ + QQuickTabButton *button = qobject_cast<QQuickTabButton *>(contentModel->get(currentIndex)); + if (button) + button->setChecked(true); +} + +void QQuickTabBarPrivate::updateCurrentIndex() +{ + Q_Q(QQuickTabBar); + QQuickTabButton *button = qobject_cast<QQuickTabButton *>(q->sender()); + if (button && button->isChecked()) + q->setCurrentIndex(contentModel->indexOf(button, Q_NULLPTR)); +} + void QQuickTabBarPrivate::updateLayout() { Q_Q(QQuickTabBar); @@ -96,8 +110,9 @@ void QQuickTabBarPrivate::updateLayout() QQuickTabBar::QQuickTabBar(QQuickItem *parent) : QQuickContainer(*(new QQuickTabBarPrivate), parent) { - setExclusive(true); + Q_D(QQuickTabBar); setFlag(ItemIsFocusScope); + QObjectPrivate::connect(this, &QQuickTabBar::currentIndexChanged, d, &QQuickTabBarPrivate::updateCurrentItem); } void QQuickTabBar::updatePolish() @@ -111,6 +126,7 @@ void QQuickTabBar::componentComplete() { Q_D(QQuickTabBar); QQuickContainer::componentComplete(); + d->updateCurrentItem(); d->updateLayout(); } @@ -121,18 +137,27 @@ void QQuickTabBar::geometryChanged(const QRectF &newGeometry, const QRectF &oldG d->updateLayout(); } +bool QQuickTabBar::isContent(QQuickItem *item) const +{ + return qobject_cast<QQuickTabButton *>(item); +} + void QQuickTabBar::itemAdded(int index, QQuickItem *item) { + Q_D(QQuickTabBar); Q_UNUSED(index); - Q_UNUSED(item); + if (QQuickTabButton *button = qobject_cast<QQuickTabButton *>(item)) + QObjectPrivate::connect(button, &QQuickTabButton::checkedChanged, d, &QQuickTabBarPrivate::updateCurrentIndex); if (isComponentComplete()) polish(); } void QQuickTabBar::itemRemoved(int index, QQuickItem *item) { + Q_D(QQuickTabBar); Q_UNUSED(index); - Q_UNUSED(item); + if (QQuickTabButton *button = qobject_cast<QQuickTabButton *>(item)) + QObjectPrivate::disconnect(button, &QQuickTabButton::checkedChanged, d, &QQuickTabBarPrivate::updateCurrentIndex); if (isComponentComplete()) polish(); } |