首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调整QDockWidget的大小

调整QDockWidget的大小
EN

Stack Overflow用户
提问于 2013-01-08 21:21:34
回答 3查看 5.1K关注 0票数 11

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

当我隐藏一个dockWidget并显示另一个时,无论我设置什么QSizePolicys,sizeHint,sizeConstraint,新显示的大小都与刚刚隐藏的相同!我希望新显示的可以恢复它自己的最后一个大小,但是我找不到任何方法来调整QDockWidget的大小,而不是使用setMinimumSizesetMaximumSize来固定它的大小。

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

代码语言:javascript
复制
setMinimumWidth(500);
setMaximumWidth(500);
qApp().processEvents();
setMinimumWidth(0);
setMaximumWidth(9999);

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

EN

回答 3

Stack Overflow用户

发布于 2013-01-13 04:11:11

从文档中:

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-02-04 08:00:52

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

我希望会有更多的功能添加到QDockWidget应用程序接口中。这是一个很棒的API,但有几个方面仍然非常缺乏。例如,获取选项卡式QDockWidget的索引的this suggested method (直接来自Qt常见问题解答)很麻烦,而且容易出错。

票数 1
EN

Stack Overflow用户

发布于 2014-06-18 23:25:57

我建议超载

代码语言:javascript
复制
protected :
virtual bool    event ( QEvent * event );

并捕捉改变你大小的事件

例如:

代码语言:javascript
复制
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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14215897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档