63 lines
1.4 KiB
C++
63 lines
1.4 KiB
C++
#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);
|
|
}
|