通过样式表

时间:2016-11-21 01:23:31

标签: c++ css qt qtstylesheets 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 个答案:

答案 0 :(得分:2)

您可以在不编写样式表的情况下实现此目的。

由于QIcon对象可以容纳多个图像,因此您只需创建一个QIcon即可为您选择两个图像(正常图像和较浅图像)。

默认情况下,QTabWidget将使用“State = Off和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);

答案 1 :(得分: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-&gt; tabWidget是我的QTabWidget。

在tabBarClicked插槽中,您可以突出显示当前插槽:

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

恕我直言,这是用户期望突出显示当前标签的内容。