替代已弃用的gtk_alignment_new

时间:2019-11-07 09:50:56

标签: gtk3

我使用了GtkAlignment小部件来控制其子小部件的对齐方式和大小。但是gtk_alignment_new自版本3.14起已过时,不应在新编写的代码中使用。我应该使用哪些功能作为替代,使代码与gtk3 +兼容?

#include <gtk/gtk.h>

int main(int argc, char *argv[]) {

  GtkWidget *window;
  GtkWidget *button;
  GtkWidget *halign;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title(GTK_WINDOW(window), "Tooltip");
  gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
  gtk_container_set_border_width(GTK_CONTAINER(window), 15);

  button = gtk_button_new_with_label("Button");
  gtk_widget_set_tooltip_text(button, "Button widget");

  halign = gtk_alignment_new(0, 0, 0, 0);
  gtk_container_add(GTK_CONTAINER(halign), button);
  gtk_container_add(GTK_CONTAINER(window), halign);  

  gtk_widget_show_all(window);

  g_signal_connect(G_OBJECT(window), "destroy",
      G_CALLBACK(gtk_main_quit), NULL);  

  gtk_main();

  return 0;
}

1 个答案:

答案 0 :(得分:2)

如评论中所建议,请使用以下两个功能:

  • void gtk_widget_set_halign (GtkWidget *widget, GtkAlign align); 设置小部件的水平对齐方式。

  • gtk_widget_get_valign (GtkWidget *widget);设置小部件的垂直对齐方式。

枚举GtkAlign类型如下:

  • GTK_ALIGN_START:布局的“开始”。垂直是顶部,水平是根据LTR / RTL左/右

  • GTK_ALIGN_END:与GTK_ALIGN_START

  • 相反
  • GTK_ALIGN_CENTER:布局的中间

  • GTK_ALIGN_FILL:占用所有可用空间

使用GTK_ALIGN_FILL进行缩放。

因此,与您的代码兼容的gtk3 +如下:

#include <gtk/gtk.h>

int main(int argc, char *argv[]) {

  GtkWidget *window;
  GtkWidget *button;    

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title(GTK_WINDOW(window), "Tooltip");
  gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);

  gtk_container_set_border_width(GTK_CONTAINER(window), 15);

  button = gtk_button_new_with_label("Button");
  gtk_widget_set_tooltip_text(button, "Button widget");

  gtk_widget_set_halign (button, GTK_ALIGN_START);
  gtk_widget_set_valign (button, GTK_ALIGN_START);

  gtk_container_add (GTK_CONTAINER (window), button);
  g_signal_connect(G_OBJECT(window), "destroy",
      G_CALLBACK(gtk_main_quit), NULL);
  gtk_widget_show_all(window);
  gtk_main();

  return 0;
}