好用的GtkList:实现checkbutton列表

    技术2022-05-11  13

       以前我想实现checkbutton列表,并且底色为白色。结果找了大半天也只找到GtkCList,但它只能加入text。

       现在做其他东西时看到了GtkList,原来这个控件功能很强大,几乎可以加入任何其他控件,checkbutton也就不在话下了。不过它只能加入一列控件,而GtkCList加入文本时是可以有多列的。

     

    #include <stdlib.h>#include <gtk/gtk.h>#define COLUMN   1GtkWidget *PackStartLabel(GtkWidget *box, const gchar *text){    GtkWidget *label;    label = gtk_label_new(text);    gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);    gtk_widget_show(label);    return label;}int main (int argc, char *argv[]){  gint i;  gchar buf[50];  GtkWidget *win = NULL;  GtkWidget *vbox = NULL;  GtkWidget *gtklist;  GtkWidget *list_item;  GtkWidget  *check;  GList            *dlist = NULL;  GtkWidget  *clist;  gchar            *text[COLUMN];  /* Initialize GTK+ */  g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL);  gtk_init (&argc, &argv);  g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL);  /* Create the main window */  win = gtk_window_new (GTK_WINDOW_TOPLEVEL);  gtk_container_set_border_width (GTK_CONTAINER (win), 8);  gtk_window_set_title (GTK_WINDOW (win), "Check box list demo");  gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);  gtk_widget_set_usize(win, 300, 300);  gtk_widget_realize (win);  g_signal_connect (win, "destroy", gtk_main_quit, NULL);  vbox = gtk_vbox_new (TRUE, 6);  gtk_container_add (GTK_CONTAINER (win), vbox);  PackStartLabel(vbox, "GtkList");  /* Cretate gtklist */  gtklist = gtk_list_new();  gtk_box_pack_start(GTK_BOX(vbox), gtklist, FALSE, FALSE, 0);  //  Create list_item with checkbutton, and add list_item to gtklist  //  GtkList nearly can add any widgets  for(i = 0; i < 2; ++i)  {      sprintf(buf, "channel%d",i);      check = gtk_check_button_new_with_label(buf);      list_item = gtk_list_item_new();      gtk_container_add(GTK_CONTAINER(list_item), check);      gtk_container_add(GTK_CONTAINER(gtklist), list_item);  }  // use GList to add list_items to gtklist  for(i = 2; i < 4; ++i)  {      sprintf(buf, "test%d",i);      list_item = gtk_list_item_new_with_label(buf);      dlist = g_list_append(dlist, list_item);  }  gtk_list_append_items(GTK_LIST(gtklist), dlist); PackStartLabel(vbox, "GtkCList"); // create clist with lables // GtkCList can only add lables  clist = gtk_clist_new (1);  gtk_box_pack_start(GTK_BOX(vbox), clist, FALSE, FALSE, 0);  for(i = 0; i < 2; ++i)  {      sprintf(buf,"test%d",i);      text[0] = buf;      gtk_clist_append (GTK_CLIST(clist),text);  }  /* Enter the main loop */  gtk_widget_show_all (win);  gtk_main ();  return 0;}


    最新回复(0)