2016-10-03 5 views
2

Чтобы сэкономить место в QTabWidget, я хотел бы показать значок закрытия только для текущей вкладки, например, например. Firefox делает:Закрыть кнопку только на активной вкладке QTabWidget

enter image description here

Есть простой способ с использованием таблицы стилей, некоторые вещи, как (не работает, как это)

QTabBar::tab::!selected::close-button {visible: false;} 

или у меня подкласс QTabWidget, чтобы получить желаемое поведение?

ответ

0

Вы можете подкласс QTabWidget, чтобы получить доступ к виджету QTabBar с использованием защищенного метода QTabWidget::tabBar. После этого вы можете подключиться к QTabBar::currentChanged сигнала и скрыть кнопку закрытия для не выбранных вкладок вручную:

QTabBar::ButtonPosition closeSide = 
     (QTabBar::ButtonPosition)style()->styleHint(QStyle::SH_TabBar_CloseButtonPosition, 0, this); 

for (int i = 0; i < toolbar->count(); ++i) 
{ 
    if (i != toolbar->currentIndex()) 
    { 
     QWidget *w = toolbar->tabButton(i, closeSide); 
     w->hide(); 
    } 
} 
+2

'QTabWidget :: tabBar' больше не _protected_. –

+1

В Qt 4.8 это было. – hank

2

Вам не нужно подкласс ничего, вы можете использовать QTabWidget::tabBar() метод для получения ссылки (т.е. QTabBar *) на вкладке бар, связанный с вашим QTabWidget. (Обратите внимание, что этот метод больше не защищен, поэтому она может быть доступна без подклассов класса)

QTabBar *tabBar = tabWidget->tabBar(); 

Теперь вы можете использовать tabBar ссылку на скрыть кнопку закрытия на внеоборотных вкладках. Например, чтобы скрыть i кнопку я, вы можете сделать:

tabBar->tabButton(i, QTabBar::RightSide)->hide(); 

Так простой рабочим процесс может быть следующим:

  • Connect QTabWidget::currentChanged(int index) сигнала к слоту.
  • В этом слоте скрыть все кнопки закрытия, отличные от кнопки, на index.
+1

Спасибо. Действительно, я могу заставить кнопки исчезнуть с этим. Однако это не изменяет ширину табуляции. На вкладке есть пустое место: https://i.imgur.com/7yO4Cmi.png. Любая идея, как вернуть это пространство? –

Смежные вопросы