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