gpt4 book ai didi

c - GtkWindow 未被文件选择器识别为 C

转载 作者:太空宇宙 更新时间:2023-11-04 00:08:10 25 4
gpt4 key购买 nike

我正在尝试制作一个 C 程序的测试版本,用户可以在其中使用 GTK 文件选择器加载游戏关卡。它似乎有效,并且确实打开了文件选择器窗口,但是当用户尝试选择文件时崩溃。问题似乎是 GtkWindow 没有被识别为 GtkWindow,尽管被声明为:

GtkWidget *window;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL); //initialize window

然后我将它保存到 gui 结构中的窗口指针:

typedef struct gui gui_t;

struct gui {
GtkWidget *window;
GtkWidget *frame;
GtkWidget *menu_bar;
GtkWidget *drawing_area;
GtkWidget *vbox;
level_t *game;
};

然后传递给下面的 load_menu 回调,它目前只是尝试打印选定的文件名:

void gui_load_menu(gpointer data) {

gui_t *gui = (gui_t *)data;

GtkWindow *window = (GtkWindow *)(gui->window);

GtkWidget *dialog;

dialog = gtk_file_chooser_dialog_new("Load Level", GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);

if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));

fprintf(stdout, "%s", filename);
}
}

这些是特定的运行时错误:

(guitest:4445): GLib-GObject-WARNING **: invalid uninstantiatable type guchar' in cast toGtkWindow'

(guitest:4445): Gtk-CRITICAL **: gtk_window_set_transient_for: assertion `parent == NULL || GTK_IS_WINDOW (parent)' failed

有什么想法吗?

谢谢!

最佳答案

你需要为回调使用正确的签名,应该是

void gui_load_menu(GtkWidget *widget, gpointer data)

每个回调都可以有不同的签名,您需要查看您使用的信号的文档以了解它是什么。我假设在这种情况下 load 是一个 GtkMenuItem,文档在这里:http://developer.gnome.org/gtk3/3.2/GtkMenuItem.html#GtkMenuItem-activate

关于c - GtkWindow 未被文件选择器识别为 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14946232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com