我在GTK TreeView中创建了一个大型ScrolledWindow,在toplevel窗口中的笔记本( toplevel窗口有一个有限的默认大小)中的一个凸起的ScrolledWindow。
当我在其中创建一个带有ScrolledWindow的TreeView时,它会得到与TreeView占用的空间一样多的空间(这比屏幕大小还要大),并且我的toplevel窗口被调整到无穷大。如何限制ScrolledWindow的分配或其Viewport大小?决定其默认大小的机制是什么?
发布于 2013-10-03 18:52:17
问题似乎已经解决了。ScrolledWindow的大小申请取决于其POLICY (在各自的方向),并且等于子小部件的请求(treeview),如果设置了POLICY_NEVER,请参见gtkscrolledwindow.c:
滚动窗口策略和大小申请处理: gtk大小申请的工作方式如下:
1)用户希望滚动窗口只适合为特定维度分配的空间。
1.1)如果用户通过为滚动窗口或其子窗口指定usize来指定该特定维度的具体值,则这不适用。2)用户希望滚动窗口为特定维度(即POLICY_NEVER)占用子窗口所需的尽可能多的空间。
还有一点很明显:
3)用户当然不会选择滚动窗口作为子容器,如果由此产生的分配占用的空间比没有滚动窗口时所分配的空间要多。
结论:
( A)如下所示:滚动窗口不应该为特定维度请求超过最低要求的空间。
( B)从1.1开始:申请可能因滚动窗口的大小(自动完成)或子窗口的大小(需要检查)而过大。
( C)从2)开始:对于POLICY_NEVER,滚动窗口只报告子维度。
( D)从3)开始:滚动窗口的最小宽度和A下的最小高度)至少对应于滚动条占用的空间。
因此,如果您设置了POLICY_NEVER,ScrolledWindow将为自己请求它的子程序所需的所有位置(如果它的子程序很大,则可能会在屏幕上膨胀)。否则,它将请求绘制滚动条所需的最小值。可能会为它分配比所请求的空间更多的空间,并且它将被扩大到其母公司内的一个合理的大小。
有时,您可能希望有两个ScrolledWindows,共享一个滚动条。不幸的是,不可能仅仅为其中之一设置POLICY_NEVER并拥有scrolled_window1.set_adjustment() = scrolled_window2.get_adjustment(),这是因为政策会影响到申请的大小,而scrolled_window1将开始请求不可预测(可能很大)的空间。
https://stackoverflow.com/questions/19161538
复制相似问题