2016-10-03 4 views
2

QTabWidget에 공간을 절약하려면 현재 탭과 같은 닫기 아이콘 만 표시하고 싶습니다. 파이어 폭스는하고있다 : QTabWidget의 활성 탭에서만 닫기 버튼

enter image description here

는 스타일 시트를 사용하여 간단한 방법은,

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

를 (이런 식으로 작동하지 않는) 또는 내가 원하는 얻을 QTabWidget를 서브 클래스해야합니까 같은 몇 가지 행동?

답변

0

보호 방법 QTabWidget::tabBar을 사용하여 QTabBar 위젯에 액세스하려면 서브 클래스 QTabWidget을 사용할 수 있습니다. 그럼 당신은 수동으로하지 선택한 탭에 대한 닫기 버튼을 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

당신은 아무것도 하위 클래스 필요가 없습니다, 당신은 탭 (예 : QTabBar *를) 참조를 얻기 위해 QTabWidget::tabBar() 방법을 사용할 수 있습니다 바 (QTabWidget)와 연결된 이제이 아닌 현재 탭에 tabBar 참조 에 숨기기 닫기 버튼을 사용할 수 있습니다

QTabBar *tabBar = tabWidget->tabBar(); 

(이 클래스를 서브 클래 싱없이 액세스 할 수 있도록,이 방법은 더 이상 을 보호하지 않습니다). 예 i 번째 버튼을 숨길를 들어, 당신은 할 수 있습니다 : 다음과 같이

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

그래서 간단한 워크 플로우 수 :

  • 연결 QTabWidget::currentChanged(int index) 신호를 슬롯에.
  • 해당 슬롯에서 index에있는 단추 이외의 모든 닫기 단추를 숨 깁니다.
+1

감사합니다. 실제로 버튼을 사라지게 만들 수 있습니다. 그러나 이것은 탭 너비를 수정하지 않습니다. 탭에 빈 공간이 있습니다 : https://i.imgur.com/7yO4Cmi.png. 그 공간을 되 찾는 방법을 생각해? –