2016-11-21 10 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シグナルをリッスンし、スタイルシートなしでアイコンを更新できることは承知していますが、各タブでどのアイコンを使用するのかは実際にはわかりますが、それぞれのタブを再確認するのは理想的ではありませんインデックスが変更された時刻。言うまでもなく、ユーザーはいつでも多くのタブを開くことができます。理にかなっている?

タブにaccessibleNameを設定することはできますか?スタイルシートを使用して別のタブを選択する別の方法はありますか?御時間ありがとうございます。

答えて

2

これは、スタイルシートを作成しなくても達成できます。

QIconオブジェクトは複数の画像を保持できるため、QIconを作成して、両方の画像(通常の画像と明るい画像)を簡単に作成することができます。

デフォルトでは、QTabWidgetは、選択されていないタブの場合は「State = Off and Mode = Normal」のイメージを使用し、選択したタブの場合は「State = On」および「Mode = Normal」のイメージを使用します。ここで

は、サンプルコードは次のとおりです。答えを

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を使用することができませんでした、あなたが記載した引数が正しくありません。基本的には同じですが、QSizeを指定する必要はありませんaddPixmapを選択しました。 – 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イスト私QTabWidget。

あなたは現在の1をハイライト表示することができますtabBarClickedスロットで

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

私見これは、ユーザーが現在のタブを強調するために期待するものです。

+0

感謝。スタイルシートを使用して特定のタブを選択する方法を見つけたいので、これは本当に問題にはなりませんでした。私のユースケースはちょうどそのものでした。私のアイコンは既にグレースケールであるため、あなたの提案は一部の人にとってはうまくいくかもしれませんが、私にとってはうまくいかないでしょう。特に白で、タブを無効にしてもアイコンは暗くなりません。明るい白のままです。 – mrg95

関連する問題