2016-11-21 68 views
0

在我的項目中,我有一個QTabWidget帶有多個選項卡,每個選項卡都有一個唯一的圖標。無論何時選擇標籤,我都希望圖標變爲正常圖標的較亮版本。通過樣式表識別特定的QTabWidget選項卡

這很簡單,樣式表QTabBar::tab:selected{image: url(image.png);}但問題是樣式表無法區分每個不同的選項卡以設置正確的圖標。不僅有'開'和'關'的圖標。有7個不同圖標的「開」和「關」圖標。

堅持與樣式表:selected方法,我試圖找到一種方法來完成這與accessName。如果在創建標籤時,我將每個標籤的accessibleName設置爲一個圖標類型標識符(icon_1,icon_2,icon_3等),稍後我可以在我的樣式表中選擇QTabBar::[accessibleName=\"icon_1\"]:selected

但是我沒有在文檔中看到任何說我可以爲每個選項卡設置accessibleName的內容。這可能嗎?此外,我知道我可以偵聽currentIndexChanged信號,並在沒有樣式表的情況下更新圖標,但是找出每個選項卡使用哪個圖標的實際方法是相當有用的,因此,重新檢查每個選項卡並不理想索引變化的時間。更不用說用戶可以在任何給定時間打開多個標籤了。合理?

是否可以將一個accessibleName設置爲選項卡?是否有另一種方式通過樣式表在不同的標籤之間進行選擇?謝謝你的時間。

回答

2

你可以在不寫樣式表的情況下實現這一點。

作爲一個QIcon對象可以容納多個圖像,您可以簡單地創建一個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); 
    } 
} 

用戶界面 - > tabWidget IST我QTabWidget。

在你tabBarClicked插槽可以突出當前:

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

恕我直言,這是一個用戶預計,凸顯當前選項卡。

+0

感謝您的回答。這並沒有真正解決這個問題,因爲我想找到一種通過樣式表選擇特定選項卡的方法。我的使用案例就是這樣,雖然你的建議可能適用於某些人,但它不適合我,因爲我的圖標已經灰度。特別是白色,禁用選項卡不會使圖標變暗。它只是保持明亮的白色。 – mrg95

相關問題