Кнопка Закрыть только на активной вкладке QTabWidget

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

введите описание изображения здесь

Есть ли простой способ использования таблицы стилей, что-то вроде (не работает, как это)

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

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

2

Решение

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

QTabBar *tabBar = tabWidget->tabBar();

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

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

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

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

Другие решения

Вы можете подкласс 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();
}
}
0

По вопросам рекламы [email protected]