通过样式表识别特定的 QTabWidget 标签
Identify Specific QTabWidget Tabs via Stylesheet
在我的项目中,我有一个带有多个选项卡的 QTabWidget
,每个选项卡都有一个独特的图标。我希望图标在标签为select ed时更改为普通图标的较轻版本。
使用样式表很简单 QTabBar::tab:selected{image: url(image.png);}
但是问题是样式表无法区分每个不同的选项卡以设置正确的图标。不只是 'on' 和 'off' 图标。有 7 个不同图标的 'on' 和 'off' 图标。
坚持使用样式表 :selected
方法,我试图找到一种使用 accessibleName 来完成此操作的方法。如果在创建选项卡时我将每个选项卡的 accessibleName 设置为图标类型标识符(icon_1、icon_2、icon_3 等),我可以稍后在我的样式表中 select QTabBar::[accessibleName=\"icon_1\"]:selected
.
但是我在文档中没有看到任何内容表明我可以为每个选项卡设置 accessibleName。这可能吗?另外,我知道我可以监听 currentIndexChanged 信号并在没有样式表的情况下更新图标,但是确定每个选项卡使用哪个图标的实际方法是相当多的工作,因此重新检查每个选项卡并不理想索引发生变化的时间。更不用说用户可以在任何给定时间打开尽可能多的选项卡。有道理吗?
是否可以将 accessibleName 设置到选项卡上?还有另一种通过样式表在不同选项卡之间 select 的方法吗?谢谢你的时间。
您可以锁定其他选项卡以突出显示当前选项卡。锁定选项卡中的文本和图标显示为灰色,因此当前选项卡突出显示。
我曾经用 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。
在您的 tabBarClicked 插槽中,您可以突出显示当前选项:
void MainWindow::on_tabWidget_tabBarClicked(int index) {
this->unlockTabs();
this->lockTabs(index);
}
恕我直言,这是用户希望突出显示当前选项卡的内容。
您无需编写样式表即可实现此目的。
由于一个 QIcon
对象可以包含多个图像,您可以简单地创建一个 QIcon
包含两个图像(普通图像和浅色图像)的选项卡。
默认情况下,QTabWidget
将为未选择的标签使用 "State = Off and Mode = Normal" 的图像,为选定的标签使用 "State = On and 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);
在我的项目中,我有一个带有多个选项卡的 QTabWidget
,每个选项卡都有一个独特的图标。我希望图标在标签为select ed时更改为普通图标的较轻版本。
使用样式表很简单 QTabBar::tab:selected{image: url(image.png);}
但是问题是样式表无法区分每个不同的选项卡以设置正确的图标。不只是 'on' 和 'off' 图标。有 7 个不同图标的 'on' 和 'off' 图标。
坚持使用样式表 :selected
方法,我试图找到一种使用 accessibleName 来完成此操作的方法。如果在创建选项卡时我将每个选项卡的 accessibleName 设置为图标类型标识符(icon_1、icon_2、icon_3 等),我可以稍后在我的样式表中 select QTabBar::[accessibleName=\"icon_1\"]:selected
.
但是我在文档中没有看到任何内容表明我可以为每个选项卡设置 accessibleName。这可能吗?另外,我知道我可以监听 currentIndexChanged 信号并在没有样式表的情况下更新图标,但是确定每个选项卡使用哪个图标的实际方法是相当多的工作,因此重新检查每个选项卡并不理想索引发生变化的时间。更不用说用户可以在任何给定时间打开尽可能多的选项卡。有道理吗?
是否可以将 accessibleName 设置到选项卡上?还有另一种通过样式表在不同选项卡之间 select 的方法吗?谢谢你的时间。
您可以锁定其他选项卡以突出显示当前选项卡。锁定选项卡中的文本和图标显示为灰色,因此当前选项卡突出显示。
我曾经用 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。
在您的 tabBarClicked 插槽中,您可以突出显示当前选项:
void MainWindow::on_tabWidget_tabBarClicked(int index) {
this->unlockTabs();
this->lockTabs(index);
}
恕我直言,这是用户希望突出显示当前选项卡的内容。
您无需编写样式表即可实现此目的。
由于一个 QIcon
对象可以包含多个图像,您可以简单地创建一个 QIcon
包含两个图像(普通图像和浅色图像)的选项卡。
默认情况下,QTabWidget
将为未选择的标签使用 "State = Off and Mode = Normal" 的图像,为选定的标签使用 "State = On and 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);