From d275226df92c70d46b50ba65c8cc566470800f2b Mon Sep 17 00:00:00 2001 From: Sergio Martins Date: Wed, 8 Jun 2022 00:30:43 +0100 Subject: [PATCH] qtquick: Fix Stack creating two TabBar's It's created by the controller, we shouldn't create another one in the view --- src/qtquick/views/Stack_qtquick.cpp | 3 +-- src/qtquick/views/Stack_qtquick.h | 1 - src/qtquick/views/TabBar_qtquick.cpp | 22 ++++++++++------------ 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/qtquick/views/Stack_qtquick.cpp b/src/qtquick/views/Stack_qtquick.cpp index ffd5ecd1..03c50491 100644 --- a/src/qtquick/views/Stack_qtquick.cpp +++ b/src/qtquick/views/Stack_qtquick.cpp @@ -41,7 +41,6 @@ Stack_qtquick::Stack_qtquick(Controllers::Stack *controller, void Stack_qtquick::init() { - m_tabBar = new Controllers::TabBar(m_stack); Q_EMIT tabBarChanged(); } @@ -89,7 +88,7 @@ void Stack_qtquick::setCurrentDockWidget(int index) QObject *Stack_qtquick::tabBarViewObj() const { - return m_tabBar->view()->asQObject(); + return m_stack->tabBar()->view()->asQObject(); } Controllers::DockWidget *Stack_qtquick::currentDockWidget() const diff --git a/src/qtquick/views/Stack_qtquick.h b/src/qtquick/views/Stack_qtquick.h index 490d7a0a..973f37d5 100644 --- a/src/qtquick/views/Stack_qtquick.h +++ b/src/qtquick/views/Stack_qtquick.h @@ -80,7 +80,6 @@ protected: private: Q_DISABLE_COPY(Stack_qtquick) DockWidgetModel *const m_dockWidgetModel; - Controllers::TabBar *m_tabBar = nullptr; Controllers::Stack *const m_stack; Controllers::DockWidget *m_currentDockWidget = nullptr; }; diff --git a/src/qtquick/views/TabBar_qtquick.cpp b/src/qtquick/views/TabBar_qtquick.cpp index ef82ad5a..958efc16 100644 --- a/src/qtquick/views/TabBar_qtquick.cpp +++ b/src/qtquick/views/TabBar_qtquick.cpp @@ -34,8 +34,10 @@ TabBar_qtquick::TabBar_qtquick(Controllers::TabBar *controller, QQuickItem *pare QHash TabBar_qtquick::qmlTabs() const { - if (!m_tabBarQmlItem) + if (!m_tabBarQmlItem) { + qWarning() << Q_FUNC_INFO << "No visual tab bar item yet" << this; return {}; + } /// Returns the list of QtQuickControls tabs in our tab bar QHash tabs; @@ -50,6 +52,8 @@ QHash TabBar_qtquick::qmlTabs() const tabs.insert(index, item); } } + } else { + qWarning() << Q_FUNC_INFO << "Couldn't find the internal ListView"; } return tabs; @@ -130,23 +134,17 @@ bool TabBar_qtquick::event(QEvent *ev) QQuickItem *TabBar_qtquick::tabAt(int index) const { - QQuickItem *view = listView(); - if (!view) - return nullptr; - - QQuickItem *item = nullptr; - QMetaObject::invokeMethod(view, "itemAtIndex", Q_RETURN_ARG(QQuickItem *, item), - Q_ARG(int, index)); - - return item; + const QHash tabs = qmlTabs(); + return tabs.value(index, nullptr); } QQuickItem *TabBar_qtquick::listView() const { // Returns the internal ListView of the TabBar - - if (!m_tabBarQmlItem) + if (!m_tabBarQmlItem) { + qWarning() << Q_FUNC_INFO << "No visual tab bar item yet"; return nullptr; + } const QList children = m_tabBarQmlItem->childItems(); for (QQuickItem *child : children) {