问题
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.
回答1:
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();
}
回答2:
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.
来源:https://stackoverflow.com/questions/29128936/qtabwidget-size-depending-on-current-tab