You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GTK4中如何获取移动窗口的坐标?替代旧版configure-event方案

在GTK4中获取窗口移动坐标的实现方案

在GTK4中,旧版本依赖configure-event获取窗口位置的方式已被弃用,你可以通过监听GtkWindow的属性通知信号来追踪窗口移动后的坐标,具体有两种常用方式:

方式一:监听notify::x和notify::y信号

直接监听窗口的x、y属性变化,每次窗口移动时会触发这些信号:

绑定信号示例

// 假设window是已创建的GtkWindow实例
g_signal_connect(window, "notify::x", G_CALLBACK(window_position_changed), NULL);
g_signal_connect(window, "notify::y", G_CALLBACK(window_position_changed), NULL);

信号处理函数

void window_position_changed(GObject *object, GParamSpec *pspec, gpointer data) {
    GtkWindow *window = GTK_WINDOW(object);
    int x, y;
    // 获取当前窗口的坐标
    gtk_window_get_position(window, &x, &y);
    // 这里可以添加你的业务逻辑,比如打印坐标
    g_print("窗口当前坐标:x=%d, y=%d\n", x, y);
}

方式二:监听notify::position信号

GtkWindow提供了position属性(类型为GdkPoint),可以一次性监听位置整体变化:

绑定信号示例

g_signal_connect(window, "notify::position", G_CALLBACK(window_position_updated), NULL);

信号处理函数

void window_position_updated(GObject *object, GParamSpec *pspec, gpointer data) {
    GtkWindow *window = GTK_WINDOW(object);
    GdkPoint pos;
    gtk_window_get_position(window, &pos.x, &pos.y);
    g_print("窗口位置更新:(%d, %d)\n", pos.x, pos.y);
}

注意事项

  • GtkEventControllerMotion仅负责鼠标指针在窗口内的移动事件,与窗口自身的位置变化无关,因此不适用此场景。
  • GTK4中已移除了事件掩码相关的API(如gtk_widget_add_events),属性通知是追踪窗口状态变化的标准方式。

内容的提问来源于stack exchange,提问作者Jan Bodnar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:18:16