itsLydt
itsLydt

Reputation: 988

Increase QTabWidget tab size while using custom palette

My app uses a QTabWidget. I want the tabs to fill the entire length of the tab bar. My app also uses a palette to set the colors of all widgets, forms, etc.

I found that I can set the tab size as intended like so:

ui->tabWidget->setStyleSheet(QString("QTabBar::tab { width: %1px; }").arg(ui->tabWidget->size().width()/ui->tabWidget->count()));

But this causes the tab widget and all of its children to ignore my palette.

How can I use my palette and also increase the tab size?

Upvotes: 1

Views: 270

Answers (1)

Aleph0
Aleph0

Reputation: 6084

I tried to reproduce your described behavior, but I was not able to do so. I'm using Qt 5.13.0, maybe it is in older version. At first I also thought, that I reproduced your behavior, but then I recognized, that I just didn't fully understood the options in QPalette, which really has a lot of ColorGroups and ColorRoles with different meanings.

Try the following simple test runner in order to verify it with your Qt Version.

#include <QApplication>
#include <QTabWidget>
#include <QFrame>
#include <QHBoxLayout>
#include <QPushButton>

int main(int argc, char** args) {
    QApplication app(argc, args);
    auto p=app.palette();
    p.setColor(QPalette::ColorGroup::Active, QPalette::ColorRole::Background, QColor("red"));
    p.setColor(QPalette::ColorGroup::Active, QPalette::ColorRole::Foreground, QColor("blue"));
    p.setColor(QPalette::ColorGroup::Active, QPalette::ColorRole::ButtonText, QColor("magenta"));  
    app.setPalette(p);
    auto w= new QTabWidget;
    auto f=new QFrame;
    f->setLayout(new QHBoxLayout);
    f->layout()->addWidget(new QPushButton("Test"));
    w->addTab(f,"Tab1");
    w->setStyleSheet(QString("QTabBar::tab { width: %1px; height: %1px }").arg(100));
    w->show(); 
    app.exec();
}

Upvotes: 0

Related Questions