QTabWidget大小取决于当前Tab

时间:2015-03-18 17:35:49

标签: c++ qt tabs size qtabwidget

我有一个QTabWidget,它包含不同高度的小部件(它们的宽度是固定的),但是,QTabWidget的默认实现选择最大小部件的高度作为自己的高度。

我想知道是否有(可能的快速)方法根据当前标签更改QTabWidget的大小,以便在显示较小标签时节省空间。

2 个答案:

答案 0 :(得分:9)

您可以将显示的小部件的大小策略设置为QSizePolicy::Preferred,将其他的大小策略设置为QSizePolicy::Ignored。之后,请致电adjustSize以更新尺寸。例如,您可以将currentChanged的{​​{1}}信号连接到插槽:

QTabWidget

并设置尺寸政策并相应调整尺寸:

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

答案 1 :(得分:0)

好的,所以这个问题已经有了一个可接受的答案,但我决定分享我的解决方案,效果非常好。这是一个基于Nejat的答案的小代码段,它适用于QTabWidgetQStackedWidget

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来使其占用尽可能小的尺寸。此外,此解决方案还需要设置当前选定的窗口小部件。