【问题标题】:GTK3 Detect user resizing windowGTK3 检测用户调整窗口大小
【发布时间】:2019-02-21 20:31:20
【问题描述】:

这是来自 Gnome 网站的一些示例代码:

#include <gtk/gtk.h>

static void resizechange() {
    printf("User resized window!\n");
}

static void
activate (GApplication *app,
          gpointer      user_data)
{
  GtkWidget *widget;

  widget = gtk_application_window_new (GTK_APPLICATION (app));
  gtk_widget_show (widget);
}

int
main (int argc, char **argv)
{
  GtkApplication *app;
  int status;

  app = gtk_application_new ("org.gnome.example", G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
  status = g_application_run (G_APPLICATION (app), argc, argv);
  g_object_unref (app);

  return status;
}

当用户调整程序窗口大小时,有没有办法可以运行resizechange() 函数,以便我可以对此采取行动?

这可以通过事件或回调来完成吗?

【问题讨论】:

    标签: c++ c linux gtk


    【解决方案1】:

    您可以通过连接到您的小部件的configure-event 信号来做到这一点。

    但是,您的回调必须尊重文档中所述的函数签名,因此不要:

    static void resizechange()
    

    你将拥有:

    static gboolean resizechange (GtkWidget *widget, GdkEvent *event, gpointer user_data)
    

    【讨论】:

    • 好的,我已经更新了我的代码并将其放入主函数 g_signal_connect (app, "activate", G_CALLBACK (resizechange), NULL);但是我仍然遇到运行时错误,这不仅适用于 GtkWidgets 而不是 GtkApplication,我如何在我的代码中使用它,谢谢@liberforce
    • 请阅读 g_signal_connect 的文档。第二个参数是您连接的信号的名称。将您的 resizechange 回调连接到 activate 信号没有意义。如我的回答所述,您需要将其连接到configure-event 信号。
    猜你喜欢
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多