如何调整QTabWidget的大小?

时间:2013-02-04 23:06:57

标签: qt4 qt4.8 qtabwidget

我的程序执行计算并输出一些原理图,绘制到标签上(使用QPixmap)。我在每个标签上都显示了一个标签。

当完成下一次计算并且图纸较小时,我希望标签的大小也减小。但这不会发生。标签尺寸保持不变。

我首先使用removeTab(删除所有以前的标签页,然后创建新标签页。唯一没有删除的是当然QTabWidget本身。

从小图纸开始时,标签尺寸随着图纸的增大而增加。但它反过来不起作用。

我该如何解决这个问题?以下代码不起作用:

layout_tabs = new QTabWidget;
layout_tabs->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);

我使用的是QT-4.8.4。

1 个答案:

答案 0 :(得分:0)

切换到较小的标签后,您(用户)可以使用鼠标手动调整窗口大小吗?

如果是这样,可能发生的是父窗口小部件(即窗口)已调整大小以容纳较大的子QTabWidget。当较大的标签出现在大标签之后时,QTabWidget将占用与其父标签一样多的空间,除非优先考虑布局层次结构中同一级别的另一个小部件。因为父窗口没有变小,QTabWidget也不会。

因此,在删除选项卡后尝试调整父窗口小部件(QMainWindow或其他)的大小,并且应该遵循选项卡窗口小部件。在Qt中,萎缩通常必须来自上方,而扩张可以来自上方或下方。这样的事情可能有用(未经测试)......

while(layout_tabs->count() > 0)
{
    QWidget* removedtab = layout_tabs->widget(0);
    layout_tabs->removeTab(0); //removeTab() doesn't delete the widget
    removedtab->deleteLater(); //so you have to delete it yourself
}
layout_tabs->updateGeometry();
mainwindow->resize(mainwindow->minimumSize());

修改请注意,QLayoutTab::removeTab()不会删除您删除的标签,因此您需要以某种方式自行删除它,例如在我刚添加的代码段中,因为已删除标签不再有父母。