2016-11-21 4 views
0

내 프로젝트에는 고유 한 아이콘이있는 여러 개의 탭이있는 QTabWidget이 있습니다. 탭을 선택할 때마다 일반 아이콘의 밝은 버전으로 아이콘을 변경하고 싶습니다.스타일 시트를 통해 특정 QTabWidget 탭 확인

이것은 스타일 시트 QTabBar::tab:selected{image: url(image.png);}에서 간단하지만 문제는 스타일 시트가 각기 다른 탭을 구분하여 올바른 아이콘을 설정할 수 없다는 것입니다. '켜짐'및 '꺼짐'아이콘이 없습니다. 7 개의 다른 아이콘에 대한 '켜짐'및 '꺼짐'아이콘이 있습니다.

스타일 시트 :selected 방법을 고수하고 있는데, 나는 이것을 accessibleName으로 수행하는 방법을 찾으려고합니다. 탭을 만들 때 각 탭의 accessibleName을 아이콘 유형 식별자 (icon_1, icon_2, icon_3 등)로 설정하면 나중에 내 스타일 시트에서 QTabBar::[accessibleName=\"icon_1\"]:selected으로 선택할 수 있습니다.

그러나 각 탭에 대해 accessibleName을 설정할 수 있다고하는 설명서에는 아무것도 표시되지 않습니다. 이것이 가능한가? 또한 currentIndexChanged 신호를 수신하고 스타일 시트가없는 아이콘을 업데이트 할 수 있다는 것을 알고 있습니다. 그러나 각 탭에 사용할 아이콘을 파악하는 실제 방법은 각별한주의를 기울여야하므로 각 탭마다 다시 검사하는 것은 바람직하지 않습니다. 색인이 변경된 시간. 사용자는 주어진 시간에 많은 탭을 열어 둘 수 있습니다. 이해가 되니?

tab에 accessibleName을 설정할 수 있습니까? 스타일 시트를 통해 다른 탭을 선택할 수있는 또 다른 방법이 있습니까? 시간 내 줘서 고마워.

답변

2

스타일 시트를 작성하지 않고도이 작업을 수행 할 수 있습니다.

QIcon 개체에 여러 이미지를 저장할 수 있으므로 두 이미지 (일반 이미지와 밝은 이미지)를 손쉽게 잡고있는 탭을 만들면됩니다.

기본적으로 QTabWidget은 선택되지 않은 탭의 경우 "상태 = 꺼짐 및 모드 = 보통"이미지를 사용하고 선택한 탭의 경우 "상태 = 켜기 및 모드 = 보통"이미지를 사용합니다. 답에 대한

QIcon icon_for_tab1; 
icon_for_tab1.addFile("tab1.png", QIcon::Off, QIcon::Normal); 
icon_for_tab1.addFile("tab1_lighter.png", QIcon::On, QIcon::Normal); 

QIcon icon_for_tab2; 
icon_for_tab2.addFile("tab2.png", QIcon::Off, QIcon::Normal); 
icon_for_tab2.addFile("tab2_lighter.png", QIcon::On, QIcon::Normal); 

QTabWidget *tabWidget; 
// Supposing tabWidget point to a valid QtabWidget instance with at least 2 tabs. 
tabWidget->setTabIcon(0, icon_for_tab1); 
tabWidget->setTabIcon(1, icon_for_tab2); 
+0

당신이 그 일을 할 수 있을지 전혀 몰랐습니다! 감사! 그러나 addFile을 사용할 수 없으므로 나열된 인수가 올바르지 않습니다. 기본적으로 addPixmap을 선택했지만 QSize를 지정하지 않아도됩니다. – mrg95

0

현재 탭을 강조 표시하기 위해 다른 탭을 잠글 수 있습니다. 잠긴 탭의 텍스트와 아이콘이 회색으로 표시되어 현재 탭이 강조 표시됩니다.

나는 SO의 코드로 그렇게하는 데 사용 :

void MainWindow::lockTabs(int except){ 
    for (int i=0; i < ui->tabWidget->count(); i++) { 
     if (i != except) ui->tabWidget->setTabEnabled(i, false); 
    } 
} 

void MainWindow::unlockTabs() { 
    for (int i=0; i < ui->tabWidget->count(); i++) { 
     ui->tabWidget->setTabEnabled(i, true); 
    } 
} 

UI-> tabWidget IST 내 QTabWidget. 당신의 tabBarClicked 슬롯에서

당신은 현재의 강조 표시 할 수 있습니다 :

void MainWindow::on_tabWidget_tabBarClicked(int index) { 
    this->unlockTabs(); 
    this->lockTabs(index); 
} 

이럴이 사용자가 현재 탭을 강조하기위한 무엇을 기대하고있다.

+0

감사 : 여기

은 샘플 코드입니다. 스타일 시트를 통해 특정 탭을 선택하는 방법을 찾고 싶기 때문에 실제로이 문제를 해결하지 못했습니다. 내 유스 케이스는 단지 그랬고, 당신의 제안이 일부에서는 작동 할 수 있지만 내 아이콘은 이미 그레이 스케일이기 때문에 제게는 효과가 없을 것입니다. 특히 흰색과 탭을 사용 중지해도 아이콘이 어두워지는 것은 아닙니다. 그것은 단지 밝은 흰색을 유지합니다. – mrg95

관련 문제