#include "TabManager.h" TabManager::TabManager(QTabWidget* tabWidget, QObject* parent) : QObject(parent), m_tabWidget(tabWidget) { Q_ASSERT(m_tabWidget); } void TabManager::hideTab(QWidget* page) { if (!page || !m_tabWidget) return; int index = m_tabWidget->indexOf(page); if (index == -1) return; if (m_hiddenTabs.contains(page)) return; TabInfo info; info.index = index; info.text = m_tabWidget->tabText(index); info.icon = m_tabWidget->tabIcon(index); info.toolTip = m_tabWidget->tabToolTip(index); m_hiddenTabs.insert(page, info); // 如果隐藏的是当前页,先切换,避免空白 if (m_tabWidget->currentIndex() == index) { int next = (index > 0) ? index - 1 : 0; m_tabWidget->setCurrentIndex(next); } m_tabWidget->removeTab(index); emit tabHidden(page); } void TabManager::showTab(QWidget* page) { if (!page || !m_tabWidget) return; if (!m_hiddenTabs.contains(page)) return; TabInfo info = m_hiddenTabs.take(page); //int insertIndex = qMin(info.index, m_tabWidget->count()); int insertIndex = m_tabWidget->count(); m_tabWidget->insertTab(insertIndex, page, info.icon, info.text); m_tabWidget->setTabToolTip(insertIndex, info.toolTip); emit tabShown(page); } bool TabManager::isHidden(QWidget* page) const { return m_hiddenTabs.contains(page); }