【发布时间】:2020-03-12 14:44:58
【问题描述】:
我正在尝试在按下按钮时从窗口中的条目字段和组合框中检索一个值。我目前正在努力这样做。有人告诉我,为了获得多个值,我需要使用结构。但是我正在努力让它发挥作用。这是我目前所拥有的:
按下按钮时运行的功能:
struct data {
GtkWidget *hash;
GtkWidget *hashType;
};
static void queue_hash (struct data *dataStruct) {
GtkWidget *hashWid = dataStruct->hash;
GtkWidget *hashTypeWid = dataStruct->hashType;
const char* hash = gtk_entry_get_text(GTK_ENTRY(hashWid));
char* hashType = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(hashTypeWid));
g_print ("Queue Hash: %s %s\n", hash, hashType);
}
按钮:
GtkWidget *hashEntry;
GtkWidget *hashSelect;
hashEntry = gtk_entry_new();
gtk_widget_set_size_request(hashEntry, 290, 33);
gtk_fixed_put(GTK_FIXED(window_fixed), hashEntry, 300, 75);
hashSelect = gtk_combo_box_text_new();
gtk_widget_set_size_request(hashSelect, 102, 25);
gtk_fixed_put(GTK_FIXED(window_fixed), hashSelect, 595, 75);
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(hashSelect), "MD5");
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(hashSelect), "SHA1");
queueButtonBox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
queueButton = gtk_button_new_with_label("Queue Hash");
gtk_fixed_put(GTK_FIXED(window_fixed), queueButtonBox, 300, 120);
struct data *cb_data = g_new0(struct data, 1);
cb_data->hash = hashEntry;
cb_data->hashType = hashSelect;
g_signal_connect (queueButton, "clicked", G_CALLBACK (queue_hash), cb_data);
当我运行代码时,我得到了这个错误:
(SDS-CW:16982): GLib-GObject-WARNING **: 14:42:38.659: invalid uninstantiatable type 'void' in cast to 'GtkEntry'
(SDS-CW:16982): Gtk-CRITICAL **: 14:42:38.659: gtk_entry_get_text: assertion 'GTK_IS_ENTRY (entry)' failed
任何帮助将不胜感激,谢谢。
【问题讨论】:
-
hashentry和hashSelect是如何定义和初始化的? -
@Gerhardh 请接受我对缺乏响应能力的歉意,我通常反应迅速,但是在过去的几天里,我不得不处理一些意外的事情把我的注意力引开了。 HashEntry 和 HashSelect 定义如下:
-
@Gerhardh
GtkWidget *hashEntry; GtkWidget *hashSelect; hashEntry = gtk_entry_new(); gtk_widget_set_size_request(hashEntry, 290, 33); gtk_fixed_put(GTK_FIXED(window_fixed), hashEntry, 300, 75); hashSelect = gtk_combo_box_text_new(); gtk_widget_set_size_request(hashSelect, 102, 25); gtk_fixed_put(GTK_FIXED(window_fixed), hashSelect, 595, 75); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(hashSelect), "MD5"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(hashSelect), "SHA1"); -
不用道歉。只要您提供缺少的信息,一切都很好。