【问题标题】:resize a QDockWidget调整 QDockWidget 的大小
【发布时间】:2012-12-22 08:38:03
【问题描述】:

我有一个QMainWindow,其中包含多个QDockWidgets。一次只能显示其中一个。我的问题是:

当我隐藏一个dockWidget并显示另一个时,无论我设置了什么QSizePolicys、sizeHint、sizeConstraint,新显示的大小和刚刚隐藏的一样!我希望新显示的图像恢复它自己的最后大小,但我找不到任何方法来调整QDockWidget 的大小,而无需使用setMinimumSizesetMaximumSize 修复其大小。

事实上有一种方法,但我认为它很丑:

setMinimumWidth(500);
setMaximumWidth(500);
qApp().processEvents();
setMinimumWidth(0);
setMaximumWidth(9999);

一定有更好的方法?!有什么建议吗?

【问题讨论】:

  • 几年前我对这个主题做了一些研究,不幸的是 QDockWidget 似乎忽略了您提供的大多数布局和大小提示。我最终得到了一个复杂的方法,涉及 setMinimumWidth/Height 和 setMaximumWidth/Height。

标签: c++ qt user-interface qdockwidget


【解决方案1】:

来自文档:

QDockWidget 充​​当其子部件的包装器,由 setWidget() 设置。自定义尺寸提示、最小和最大尺寸以及尺寸策略应在子小部件中实现。 QDockWidget 将尊重它们,调整自己的约束以包括框架和标题。大小约束不应该在 QDockWidget 本身上设置,因为它们会根据它是否停靠而改变;停靠的 QDockWidget 没有框架和较小的标题栏。

这意味着您应该调整子小部件的大小,而不是调整 DockWidget 的大小。

【讨论】:

  • 是的,我已经读了好几遍了。我尝试了几个小时通过实现 sizeHint() 和设置各种策略来实现正确的大小调整,但没有任何效果。在我看到一个工作示例之前,我不会相信文档的那一部分。除此之外,我仍然希望 DockWidges 恢复它们的最后大小,以免用户每次更改显示的 DockWidget 时都强制调整它们的大小。
  • @Nythagoras ...7 年后我遇到了同样的问题和同样的绝望:-)
【解决方案2】:

我尝试了您在问题中建议的解决方案,它对我有用,尽管在小部件经历额外的绘制周期时会出现难看的闪光。我还没有找到更好的方法,所以我暂时使用它,直到 Qt 发布对 QDockWidget 的更好支持。

我希望 QDockWidget API 中会添加更多功能。这是一个很棒的 AP​​I,但仍有几个领域非常缺乏。例如,this suggested method 获取选项卡式 QDockWidget 的索引(来自 Qt 常见问题解答)很麻烦且容易出错。

【讨论】:

    【解决方案3】:

    我建议重载

    protected :
    virtual bool    event ( QEvent * event );
    

    并捕捉改变你大小的事件

    例如:

    QRect mGeo;
    bool    MyDockWidget::event ( QEvent * aEvent )
    {
        if(aEvent->isAccepted ())
        {
            if(aEvent->type()==QEvent::Hide)
            {
                mGeo=this->geometry();
            }
            if(aEvent->type()==QEvent::Show)
            {
                this->setGeometry(mGeo);
            }
        }
        return QDockWidget::event(aEvent);
    }
    

    【讨论】:

    • setGeometry 似乎没有将几何设置为请求的 QRect。无论有没有 setGeometry,程序的行为都是一样的。
    猜你喜欢
    • 1970-01-01
    • 2011-01-22
    • 2020-06-02
    • 2016-04-05
    • 1970-01-01
    • 2013-11-05
    • 2014-12-04
    • 2011-02-12
    • 1970-01-01
    相关资源
    最近更新 更多