提问人:Shak Marifkhonov 提问时间:12/12/2019 更新时间:12/15/2019 访问量:87
在 C 语言中将参数从 ComboBox 传递给 GTKTreeView
Pass parameters from ComboBox to GTKTreeView in C
问:
在C语言中,如何将ComboBox中的值传递给GtkTreeView?我们已经尝试了这段代码,但我们不知道在哪里写 ComboBox 的 id。ComboBox 中应该使用哪些信号?
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);
}
GtkTreeView GtkWindow 与 ComboBox
谢谢 此致敬意 摇晃
答:
0赞
Siva Guru
12/15/2019
#1
#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();
}
如果要在 onClick 信号期间传递自定义数据,请使用
g_signal_connect
https://developer.gnome.org/gobject/stable/gobject-Signals.html。 通常,对于连接信号,您可以使用g_connect手动连接它,因为在程序期间,您可能希望修改将存储在结构中的数据,因此您可以手动连接,而不是使用格莱德。
#suggestions(如果你的实际程序看起来像这样)。您可以通过在“listtree_window”窗口中添加“添加”按钮并使“main_window”对话框在单个主窗口中完成上述程序。
评论
0赞
Siva Guru
12/15/2019
在 Glade 文件中,删除“OnClick”处理程序的“提交”按钮
0赞
Shak Marifkhonov
12/15/2019
int i = 0;char *p = strtok (car_name, “ ”);字符 *data[100];而 (p) { data[i++] = p; p = strtok (NULL, “ ”);printf(“从数据[0]打印值: %s\n”, data[0]);gtk_list_store_set(liststore1, &iter, 0, data[0], 1, data[1], 2, data[2], 3, data[3], 4, data[4], 5, data[5], 6, data[6], 7, data[7], 8, data[8], 9, data[9], 10, data[10], -1);[RINTF正在工作,而gtk_list_store_set不起作用。我该如何解决这个问题?
0赞
Siva Guru
12/16/2019
(developer.gnome.org/glib/stable/...)尝试使用 Glib 字符串实用程序函数。strtok() 本质上是不安全的 (stackoverflow.com/questions/8957829/strtok-segmentation-fault)
评论