QSpacerItem changeSize吸引了bug

时间:2012-08-01 12:30:31

标签: c++ qt layout

我正在创建一个日历应用,只是完成了约会视图和编辑。基本上它是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

enter image description here

1 个答案:

答案 0 :(得分:3)

如果没有您的小部件的构造代码,那么有点难以猜测,发生了什么。您是否尝试使用QBoxLayout :: insertSpacing(int index,int size)和QLayout :: removeItem(QLayoutItem * item)插入/删除SpacerItems?

你改变大小后是否调用了QLayout :: invalidate()?