在C中将参数从ComboBox传递到GTKTreeView

在C中将参数从ComboBox传递到GTKTreeView,c,combobox,gtk3,gtktreeview,C,Combobox,Gtk3,Gtktreeview,在C语言中,如何将ComboBox中的值传递给GtkTreeView?我们已经尝试过这段代码,但是我们不知道在哪里写ComboBox的ID。组合框中应该使用什么信号 void on_btn_car_order_clicked(GtkButton *button, gpointer *user_data){ GtkTreeIter iter; GtkTreeView *treeview_payment1 = GTK_TREE_VIEW(user_data); Gtk

在C语言中,如何将ComboBox中的值传递给GtkTreeView?我们已经尝试过这段代码,但是我们不知道在哪里写ComboBox的ID。组合框中应该使用什么信号

   void on_btn_car_order_clicked(GtkButton *button, gpointer *user_data){
    GtkTreeIter iter;

    GtkTreeView *treeview_payment1 = GTK_TREE_VIEW(user_data);
    GtkListStore *liststore1 = GTK_LIST_STORE(gtk_tree_view_get_model(treeview_payment1));
    gtk_list_store_append(liststore1, &iter);
    gtk_list_store_set(liststore1, &iter, 0, "asdas" , 1, 1.0,2, 10.0, -1);    
    gtk_widget_hide (GTK_WIDGET(detail_window));
    gtk_widget_show(listree_window);     
}

谢谢,, 顺致敬意, 沙克

。 一般来说,对于连接信号,您可以使用g_connect手动连接,因为在您的程序中,您可能需要修改将存储在结构中的数据,因此您可以手动连接,而不是使用glade


#建议(如果你的实际计划是这样的)。您可以在一个主窗口中完成上述程序,方法是在“listtree\u window”窗口中添加一个Add按钮,并使“main\u window”成为一个对话框。

对您的要求进行更详细的解释会有所帮助。。比如当你想将组合框传递给treeview时??如果你在这张图片(GtkWindow with ComboBox)中看到一个按钮“Order”。在\u btn\u car\u order\u单击时,我们尝试将ComBox中的值传递到Label,它可以正常工作。因此,按order时,您希望将数据传递到树视图并填充表格。如果可能,您可以共享您的代码。。对我来说,建议更改会更容易。我可以将代码发送到哪里,我认为它不适合这里..你可以将其上载到某个在线云存储站点,并授予我编辑它的权限。在你的glade文件中,删除提交按钮的“onclick”处理程序I=0;char*p=strtok(车名“”);字符*数据[100];而(p){data[i++]=p;p=strtok(NULL,”;}printf(“数据[0]的打印值:%s\n”,数据[0]);gtk_列表存储集(liststore1和iter,0,数据[0],1,数据[1],2,数据[2],3,数据[3],4,数据[4],5,数据[5],6,数据[6],7,数据[7],8,数据[8],9,数据[9],10,数据[10],-1);[rintf正在工作,而gtk_列表_存储_集不工作。如何修复此问题?()请尝试使用Glib字符串实用程序函数。strtok()本质上是不安全的()
#include <gtk/gtk.h>

typedef struct
{
    GtkWidget *w_car_choose;
    GtkWidget *w_model_choose;
    GtkWidget *w_submit_button;
    GtkWidget *w_treeview;
} app_widgets;

GtkBuilder *builder;
GtkWidget *main_window;
GtkWidget *listtree_window;

void on_btn_submit_clicked(GtkButton *button, gpointer *user_data);

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

    app_widgets *widgets = g_slice_new(app_widgets);

    gtk_init(&argc, &argv);

    builder = gtk_builder_new();
    gtk_builder_add_from_file(builder, "test.glade", NULL);

    main_window = GTK_WIDGET(gtk_builder_get_object(builder, "main_window"));
    listtree_window = GTK_WIDGET(gtk_builder_get_object(builder, "listtree_window"));


    // get pointers to widgets
    widgets->w_treeview = GTK_WIDGET(gtk_builder_get_object(builder, "treeview"));
    widgets->w_car_choose = GTK_WIDGET(gtk_builder_get_object(builder, "car_choose"));
    widgets->w_model_choose = GTK_WIDGET(gtk_builder_get_object(builder, "model_choose"));
    widgets->w_submit_button = GTK_WIDGET(gtk_builder_get_object(builder, "btn_submit"));
    gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->w_car_choose), 1);
    gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->w_model_choose), 1);

    gtk_builder_connect_signals(builder, widgets);

    g_object_unref(builder);

    gtk_widget_show(main_window);

    g_signal_connect(GTK_WIDGET(widgets->w_submit_button), "clicked", G_CALLBACK(on_btn_submit_clicked), widgets);

    gtk_main();
    g_slice_free(app_widgets, widgets);

    return 0;
}

void on_btn_submit_clicked(GtkButton *button, gpointer *user_data)
{
    app_widgets *widgets = user_data;

    GtkTreeIter iter;
    GtkListStore *liststore = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->w_treeview)));
    gtk_list_store_append(liststore, &iter);
    gtk_list_store_set(liststore, &iter, 0, gtk_combo_box_text_get_active_text(GTK_COMBO_BOX(widgets->w_model_choose)), 1, gtk_combo_box_text_get_active_text(GTK_COMBO_BOX(widgets->w_car_choose)), -1);

    gtk_widget_hide(GTK_WIDGET(main_window));
    gtk_widget_show(listtree_window);
}

// called when window is closed
void on_window_main_destroy()
{
    gtk_main_quit();
}
g_signal_connect