【问题标题】:How can I resize a QTabWidget?如何调整 QTabWidget 的大小?
【发布时间】:2013-01-19 18:48:57
【问题描述】:

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

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

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

从小图纸开始时,选项卡的大小会随着图纸的增大而增加。但是反过来就不行了。

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

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

我正在使用 QT-4.8.4。

【问题讨论】:

    标签: qt4 qt4.8 qtabwidget


    【解决方案1】:

    您(用户)能否在切换到较小的标签后使用鼠标手动调整窗口大小?

    如果是这样,可能发生的情况是父窗口小部件(即窗口)已调整大小以适应较大的子 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());
    

    edit注意QLayoutTab::removeTab()不会删除你删除的标签,所以你需要自己删除它,比如我刚刚添加的代码sn-p,因为删除的标签不再有父标签。

    【讨论】:

    • 感谢您的回答!是的,我可以使用鼠标调整窗口大小 :-) 为什么我没有想到这一点。好的,我会尝试 updategeometry() 并告诉你它是否成功。
    • 一个问题是我将我的 qtabwidget 放入了一个 qdockwidget。当我只做 layout_tabs = new QTabWidget;一切正常。除了当我的主窗口关闭时选项卡不会关闭。
    • 确保您new 的每个小部件都有一个QObject 父级,方法是将其传递给其构造函数或通过布局将小部件放置在另一个小部件中。 QObjects,包括 QWidgets 及其后代,将删除其析构函数中的所有子代。另请参阅我关于 QTabWidget::removeTab() 的新评论。
    猜你喜欢
    • 2016-10-07
    • 2011-09-07
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    相关资源
    最近更新 更多