GtkContainer/GtkWidget 最大宽度

11
我正在尝试编写一个应用程序,其中包含一个GtkBox(水平),根据各种条件添加动态数量的带有标签的按钮。现在我想防止GtkBox增长超过(例如)600px。按钮标签可以被省略。
因此,我的问题是,是否有任何常见的解决此问题的方法?如果没有,我认为我需要创建一个新的容器类来监视其大小。
我正在使用GTK的C API(gtk+-3.0)。
2个回答

8
当前版本的GTK中不直接支持max-width CSS属性。未来版本可能会实现该属性,因为已经有很多请求。您可以创建一个新的容器子类并从GtkBin继承,以保持简单,然后在您的size_allocate处理程序中将宽度限制在最大值之内,然后将其传递给子小部件。您还可以尝试使用Emeus, 这是一种约束布局库,与iOS的实现方式类似。

但它将所有子元素都绘制到左侧,如何将所有子元素绘制在中心? - Mohit Atray

3
据我所知,没有简单的方法来限制小部件的大小。您可以侦听 size-allocate 信号,并在接收到它时调用 set_size_request 来实现缩小小部件的尺寸请求。
由于大小请求只是请求而不是命令,根据情况,您可能无法将小部件缩小到想要的尺寸,但这种情况应该很少发生。

2
size-allocate 信号处理程序中强制重新布局通常会对性能产生负面影响。虽然它通常可以工作,但可能会导致丑陋的“卡顿”,其中小部件在着陆之前会跳过几个大小迭代。 - ptomato
1
@ptomato,你的方法肯定可以更好,尤其是在GPU速度较慢的情况下。无论如何,看起来我们确实需要一个CSS属性来解决这个问题。 - oldtechaa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接