【问题标题】:QTabWidget size depending on current TabQTabWidget 大小取决于当前选项卡
【发布时间】:2015-05-21 15:26:21
【问题描述】:

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

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

【问题讨论】:

  • QTabWidget 不会选择最大小部件的高度作为它自己的高度,除非您在 QTabWidget 上使用布局。因此,如果要手动更改QTabWidget的大小,请移除布局并根据currentChanged信号调用QTabWidget::resize

标签: c++ qt tabs size qtabwidget


【解决方案1】:

好的,所以这个问题已经有了一个公认的答案,但我决定分享我的解决方案,它的效果非常好。这是一个基于 Nejat 答案的小代码 sn-p,它适用于 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();
}

注意:我使用最小而不是首选,以使其占用尽可能小的尺寸。此外,此解决方案希望当前选择的小部件已经设置。

【讨论】:

    【解决方案2】:

    您可以将显示的小部件的大小策略设置为QSizePolicy::Preferred,其他的设置为QSizePolicy::Ignored。之后调用adjustSize 更新尺寸。例如,您可以将QTabWidgetcurrentChanged 信号连接到插槽:

    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();
    }
    

    【讨论】:

    • 它就像一个魅力!尽管如此,我想知道为什么adjustSize 电话是必要的。我已经评论了他们两个,你的解决方案仍然可以正常工作。
    • @Peregring-lk :最后两行调整主窗口本身的大小。您可能希望避免它,具体取决于您的应用程序。例如,如果您将其余的小部件设置为扩展到刚刚可用的空间,那么如果窗口自行调整大小就不是很好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多