Bleser Asked:2022-05-04 02:13:33 +0800 CST2022-05-04 02:13:33 +0800 CST 2022-05-04 02:13:33 +0800 CST 如何在 Gtk4 中获取小部件调整大小通知? 772 我正在尝试Gtk3从Gtk4. 如果早些时候可以轻松连接到信号size_allocate,那么gtk4这个信号被删除了,现在我不知道如何找出小部件何时调整大小。 gtk 1 个回答 Voted Best Answer Bleser 2022-05-07T19:35:15+08:002022-05-07T19:35:15+08:00 经过一些实验,我找到了适合我的解决方案。 也许还有更漂亮的选择,但我不知道。 class MyAppWindow: Gtk.ApplicationWindow { public int windowWidth { get { return get_width(); } set { Idle.add(() => { print(@"window width: $value\n"); return Source.REMOVE; }); } } public bool isMaximized { get { return maximized; } set { Idle.add(() => { print(@"window maximized: $isMaximized; width: $(get_width())\n"); return Source.REMOVE; }); } } public MyAppWindow(Gtk.Application app) { Object(application: app); this.bind_property("default-width", this, "windowWidth", BindingFlags.DEFAULT | BindingFlags.SYNC_CREATE); this.bind_property("maximized", this, "isMaximized", BindingFlags.DEFAULT | BindingFlags.SYNC_CREATE); } } 在这里,我连接了属性default_width和属性maximized中的属性和。Gtk.ApplicationWindowwindowWidthisMaximized 在正常的窗口拉伸中,它setter在windowWidth我们可以调用信号或其他方法的地方被调用。 isMaximized仅在最大化窗口时才有效,这是获取窗口大小所必需的。在这种情况下windowWidth不起作用。 Gtk.Widget我没能做到这一点,但你可以尝试实现 、 和 方法来measure拦截size_allocate小部件get_request_mode大小的size_allocate变化。 疯狂的已经添加到 Gtk4LayoutManager中,虽然它们可能有用,但到目前为止它们只会干扰我。 如果您添加到小部件,那么您在小部件类中覆盖的LayoutManager方法measure将不会被调用。size_allocateget_request_mode
经过一些实验,我找到了适合我的解决方案。
也许还有更漂亮的选择,但我不知道。
在这里,我连接了属性
default_width
和属性maximized
中的属性和。Gtk.ApplicationWindow
windowWidth
isMaximized
在正常的窗口拉伸中,它
setter
在windowWidth
我们可以调用信号或其他方法的地方被调用。isMaximized
仅在最大化窗口时才有效,这是获取窗口大小所必需的。在这种情况下windowWidth
不起作用。Gtk.Widget
我没能做到这一点,但你可以尝试实现 、 和 方法来measure
拦截size_allocate
小部件get_request_mode
大小的size_allocate
变化。疯狂的已经添加到 Gtk4
LayoutManager
中,虽然它们可能有用,但到目前为止它们只会干扰我。如果您添加到小部件,那么您在小部件类中覆盖的
LayoutManager
方法measure
将不会被调用。size_allocate
get_request_mode