QTabWidget 大小取决于当前 Tab
QTabWidget size depending on current Tab
我有一个QTabWidget
,其中包含不同高度的小部件(它们的宽度是固定的),但是QTabWidget
的默认实现选择最大的小部件高度作为自己的高度。
我想知道是否有一种(可能快速)方法可以根据其当前选项卡更改 QTabWidget
的大小,以便在显示较小的选项卡时保存 space。
您可以将显示的小部件的大小策略设置为 QSizePolicy::Preferred
,将其他小部件设置为 QSizePolicy::Ignored
。之后调用 adjustSize
更新尺寸。例如,您可以将 QTabWidget
的 currentChanged
信号连接到插槽:
connect(ui->tabWidget,SIGNAL(currentChanged(int)),this, SLOT(updateSizes(int)));
并在广告位中相应地设置尺寸政策和调整尺寸:
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();
}
好吧,这个问题已经有了公认的答案,但我决定分享我的解决方案,效果非常好。这是一个基于 Nejat 答案的小代码片段,适用于 QTabWidget
和 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();
}
注意:我使用 Minimum 而不是 Preferred 以使其占用尽可能小的尺寸。此外,此解决方案要求已设置当前选定的小部件。
我有一个QTabWidget
,其中包含不同高度的小部件(它们的宽度是固定的),但是QTabWidget
的默认实现选择最大的小部件高度作为自己的高度。
我想知道是否有一种(可能快速)方法可以根据其当前选项卡更改 QTabWidget
的大小,以便在显示较小的选项卡时保存 space。
您可以将显示的小部件的大小策略设置为 QSizePolicy::Preferred
,将其他小部件设置为 QSizePolicy::Ignored
。之后调用 adjustSize
更新尺寸。例如,您可以将 QTabWidget
的 currentChanged
信号连接到插槽:
connect(ui->tabWidget,SIGNAL(currentChanged(int)),this, SLOT(updateSizes(int)));
并在广告位中相应地设置尺寸政策和调整尺寸:
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();
}
好吧,这个问题已经有了公认的答案,但我决定分享我的解决方案,效果非常好。这是一个基于 Nejat 答案的小代码片段,适用于 QTabWidget
和 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();
}
注意:我使用 Minimum 而不是 Preferred 以使其占用尽可能小的尺寸。此外,此解决方案要求已设置当前选定的小部件。