gtk下拉框中如何根据不同的选中改变另一个输入框的值

新手上路,请多包涵
下拉框 A:b
         c
         d

输入框 E:[ b] 当b选中时 输入框自动填写b

则当 下啦框中c 选中时 输入框E 自动填写c

需求的功能大概是这样子。摆脱各位不要告诉我用手去写。。。。。

非无脑伸手党,已经百度半天了,毕竟是新手。谢谢各位大神了。

阅读 4.2k
1 个回答

其实这个很简单,主要是使用combo box, 监听changed事件, 监听时把输入框也给传过去。

以下代码用的gtk2:

#include <gtk/gtk.h>

// 先定义一下 combox box 的回调函数
gboolean combo_box_callback(GtkWidget *widget, gpointer data);

int main(int argc, char *argv[]) {
  GtkWidget *window;
  GtkWidget *box;
  GtkWidget *entry;
  GtkWidget *combo;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title(GTK_WINDOW(window), "Combobox & entry");
  g_signal_connect(GTK_WINDOW(window), "destroy",
      G_CALLBACK(gtk_main_quit), NULL);
  gtk_widget_show(window);

  box = gtk_vbox_new(FALSE, 0); 
  gtk_container_add(GTK_CONTAINER(window), box);
  gtk_widget_show(box);

  combo = gtk_combo_box_text_new();
  gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), "A");
  gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), "B");
  gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), "C");
  gtk_box_pack_start(GTK_BOX(box), combo, FALSE, FALSE, 0); 
  gtk_widget_show(combo);

  entry = gtk_entry_new();
  gtk_widget_show(entry);
  gtk_box_pack_start(GTK_BOX(box), entry, FALSE, FALSE, 0); 

  // 主要是监听 combo box 的 changed 事件, 把 entry 作为 data 也传进去
  g_signal_connect(combo, "changed", G_CALLBACK(combo_box_callback), entry);

  gtk_main();
  return 0;
}

gboolean combo_box_callback(GtkWidget *widget, gpointer data) {
  gchar *string;
  GtkWidget *entry = (GtkWidget *) data; // 这里 data 就是刚传来的 entry

  // 取到 combo box 的 text
  string = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widget));
  // 修改 entry 的 text
  gtk_entry_set_text(GTK_ENTRY(entry), string);
}

图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏