我正在创建一个日历应用,只是完成了约会视图和编辑。基本上它是QVBoxLayout
,其中包含viewlayout和editlayout,我隐藏并显示视图或使用信号进行编辑。
这很好,有一个问题:在viewlayout中我有一个额外间距的QSpacerItem,为了在查看编辑部分时删除空间我改变了它的大小。
喜欢这样
if( show_view_hide_edit )
spacer->changeSize(1, 60, QSizePolicy::Expanding, QSizePolicy::Fixed );
else
spacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed );
此代码在窗口小部件显示时以及将其交换为“编辑”时有效。当我将其切换回视图然后返回编辑时,间距位于我的屏幕顶部。它真的不应该存在。图像显示了会发生什么(link to image for size)
答案 0 :(得分:3)
如果没有您的小部件的构造代码,那么有点难以猜测,发生了什么。您是否尝试使用QBoxLayout :: insertSpacing(int index,int size)和QLayout :: removeItem(QLayoutItem * item)插入/删除SpacerItems?
你改变大小后是否调用了QLayout :: invalidate()?