我有一个包含多个QDockWidget的QMainWindow,一次只能显示其中的一个。我的问题是:
当我隐藏一个dockWidget并显示另一个时,无论我设置什么QSizePolicys,sizeHint,sizeConstraint,新显示的大小都与刚刚隐藏的相同!我希望新显示的可以恢复它自己的最后一个大小,但是我找不到任何方法来调整QDockWidget的大小,而不是使用setMinimumSize和setMaximumSize来固定它的大小。
事实上,有一种方法,但我认为它非常丑陋:
setMinimumWidth(500);
setMaximumWidth(500);
qApp().processEvents();
setMinimumWidth(0);
setMaximumWidth(9999);一定有更好的办法?!有什么建议吗?
发布于 2013-01-13 04:11:11
从文档中:
QDockWidget充当其使用setWidget()设置的子小部件的包装器。自定义大小提示、最小和最大大小以及大小策略应在子小部件中实现。QDockWidget将尊重它们,调整自己的约束以包括框架和标题。不应该在QDockWidget本身上设置大小约束,因为它们会根据是否停靠而变化;停靠的QDockWidget没有框架和较小的标题栏。
这意味着您应该调整子部件的大小,而不是调整DockWidget的大小。
发布于 2013-02-04 08:00:52
我尝试了你在问题中建议的解决方案,它对我很有效,尽管在小部件经历额外的绘制周期时有一个丑陋的闪光灯。我还没有找到更好的方法,所以我将暂时使用它,直到Qt发布对QDockWidget的更好支持。
我希望会有更多的功能添加到QDockWidget应用程序接口中。这是一个很棒的API,但有几个方面仍然非常缺乏。例如,获取选项卡式QDockWidget的索引的this suggested method (直接来自Qt常见问题解答)很麻烦,而且容易出错。
发布于 2014-06-18 23:25:57
我建议超载
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);
}https://stackoverflow.com/questions/14215897
复制相似问题