Search code examples
c++qttabssizeqtabwidget

QTabWidget size depending on current Tab


I've a QTabWidget, which contains widgets of different heights (their widths are fixed), however, the default implementation ofQTabWidget selects the biggest widget's height as own height.

What I would like to know if there's a (possible fast) way to change the size of QTabWidget depending on its current tab, to save space when smaller tabs are shown.


Solution

  • You can set the size policy of the widget that is displayed to QSizePolicy::Preferred and the other ones to QSizePolicy::Ignored. After that call adjustSize to update the sizes. For example you can connect the currentChanged signal of the QTabWidget to a slot :

    connect(ui->tabWidget,SIGNAL(currentChanged(int)),this, SLOT(updateSizes(int)));
    

    And set size policies and adjust sizes accordingly in the slot :

    void MainWindow::updateSizes(int index)
    {
        for(int i=0;i<ui->tabWidget->count();i++)
            if(i!=index)
                ui->tabWidget->widget(i)->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
    
        ui->tabWidget->widget(index)->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
        ui->tabWidget->widget(index)->resize(ui->tabWidget->widget(index)->minimumSizeHint());
        ui->tabWidget->widget(index)->adjustSize();
        resize(minimumSizeHint());
        adjustSize();
    }