【问题标题】:Style every single tab of a QTabWidget differently from each otherQTabWidget 的每个选项卡的样式彼此不同
【发布时间】:2012-05-24 16:22:22
【问题描述】:

我有一个包含 4 个选项卡的 QTabWidget。我想单独为它们的每个标题设置样式:我看到我可以使用样式表来做到这一点。但我的问题是,我不能只更改一个选项卡的标题,即选项卡名称所在的位置,而不更改选项卡的其余部分。

简单来说,假设我想要第一个标签为红色,第二个为蓝色,第三个为绿色,第四个为黄色。那么,如何在不更改其他选项卡的情况下更改每个选项卡的样式。

谢谢!

编辑

我看到了there 我如何可以一次更改所有选项卡标题的样式,但不能单独更改

【问题讨论】:

    标签: qt qtstylesheets


    【解决方案1】:

    如果你继承 QTabWidget,你可以访问受保护的函数QTabWidget::tabBar(),它返回它使用的 QTabBar。 QTabBar 有一个方法QTabBar::setTabTextColor(),它将改变单个标签的文本颜色。这是一个例子:

    #include <QtGui>
    
    class TabWidget : public QTabWidget
    {
    public:
        TabWidget()
        {
            addTab(new QPushButton("Hi 1!"), "Button 1 Tab");
            addTab(new QPushButton("Hi 2!"), "Button 2 Tab");
            tabBar()->setTabTextColor(0, QColor(Qt::red));
            tabBar()->setTabTextColor(1, QColor(Qt::blue));
        }
    };
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
        TabWidget tabWidget;
    
        tabWidget.show();
        return app.exec();
    }
    

    如果您需要更多控制,可以制作自己的标签小部件。根据docs,QTabWidget 基本上只是一个QStackedWidget 与一个QTabBar 组合。您可以通过将 QStackedWidget 与例如一组风格化的 QPushButtons 组合来制作自己的选项卡小部件。

    【讨论】:

    • 谢谢!这就是我想要的...但是我想更改选项卡标题的背景而不是文本,因为我每个都有一个样式...我试图尽可能深入地查看文档,但我没有看到任何东西。我想制作自己的 tabwidget,但即便如此,我也没有看到如何在标签栏中更改标签的背景
    • @castors33 如果您必须更改背景,我建议您通过组合 QStackedWidget 和一些 QPushButtons 来制作您自己的小部件,也许在 QToolBar 中。当然,您可以尝试继承 QTabWidget 并重新实现 paintEvent,但我有一种感觉会变得非常复杂。无论哪种方式,样式表似乎都不适用于访问单个选项卡标题。不过,您可以轻松地单独设置按钮样式。
    • 好的...这看起来有点长,但看起来还不错。我要试试这个谢谢!
    猜你喜欢
    • 2018-02-05
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 2017-10-02
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多