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.
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();
}
OK so this question was already has an accepted answer, but I decided to share my solution, which works remarkably well. It is a small code snippet based on Nejat's answer, and it will work for QTabWidget and QStackedWidget.
template <typename T>
void pack(T *stacked)
{
for(int i=0; i<stacked->count(); i++) {
stacked->widget(i)->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
}
QWidget *widget=stacked->currentWidget();
widget->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
widget->resize(widget->minimumSizeHint());
widget->adjustSize();
stacked->resize(stacked->minimumSizeHint());
stacked->adjustSize();
}
NOTE: I used Minimum instead of Preferred to make it take up as small size as possible. Also, this solution expects the currently selected widget to already be set.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With