11

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

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

实际上有一种方法,但我认为它非常难看:

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

一定会有更好的办法?!有什么建议么?

4

3 回答 3

2

从文档中:

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

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

于 2013-01-12T20:11:11.467 回答
1

我建议超载

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);
}
于 2014-06-18T15:25:57.177 回答
1

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

我希望 QDockWidget API 中会添加更多功能。这是一个很棒的 AP​​I,但仍有几个领域非常缺乏。例如,这种获取选项卡式 QDockWidget 索引的建议方法(直接来自 Qt FAQ)很麻烦且容易出错。

于 2013-02-04T00:00:51.990 回答