如何动态更改添加到TabWidget的选项卡的颜色?

时间:2019-10-30 13:55:49

标签: c++ qt

我有一个TabWidget,应该显示某些模块的名称和状态。该状态由一个数值给出,在运行时读取该数值并作为字符串(即“ 10”)以及相应的名称传递。 我使用std::map<std::string, std::string>将这两个传递给我的MainWindow()类,该类应该在QTableWidget中显示其信息,如下所示:

  • 模块名称应显示在TabHeader中

  • 模块的状态应更改TabHeader的背景色,既可以选择它也可以不选择它,这取决于传递的数值。现在,我只想更改一个特定标签的颜色。如果传递的状态变量的值不是红色,则为“ 10”,否则为绿色。 当服务器每n秒查询一次此信息时,颜色应在运行期间发生。

TabWidget可以很好地工作,除了颜色变化。

您可以在下面看到我的SLOT。我遍历std::map<std::string, std::string>,将第一个参数读入选项卡标题,然后尝试根据地图的每个元素的第二个参数更改选项卡的样式。

void MainWindow::on_sendState(std::map<std::string, std::string> SomeMap)
{
    ui->tabWidget->clear();
    for (std::map<std::string, std::string>::iterator it = SomeMap.begin(); it != SomeMap.end(); ++it){
        QWidget *tab = new QWidget();
        SkillWidget *skill = new SkillWidget(tab);
        std::string default_node_value = "10";
        ui->tabWidget->addTab(tab, QString::fromStdString(it->first));
        for(unsigned int i = 0; i < default_node_value.length(); ++i){
            if((it->second[i] - '0') < (default_node_value[i] - '0')){
                std::cout << "setting red" << std::endl;
                ui->tabWidget->setStyleSheet(
                            "QTabBar::tab { background: red; color: white; padding: 10px; } "
                            "QTabBar::tab:selected { background: red; } "
                            "QTabWidget::pane { border: 0; } "
                            "QWidget { background: lightgray; } ");
            }
            else {
                std::cout << "setting green " <<std:: endl;
                ui->tabWidget->setStyleSheet(
                            "QTabBar::tab { background: green; color: white; padding: 10px; } "
                            "QTabBar::tab:selected { background: green; } "
                            "QTabWidget::pane { border: 0; } "
                            "QWidget { background: lightgray; } ");
            }
        }
    }
}

在一个选项卡中显示的状态值从“ 10”更改为“ 5”时,输入条件分支。我希望该选项卡的背景颜色从绿色变为红色,但所有选项卡的样式/颜色仍为绿色。 如果有人指出为什么输入第一个样式表的分支却什么都看不见,那将是很好的选择。

0 个答案:

没有答案