gpt4 book ai didi

c - 如何用C关闭GTK窗口

转载 作者:行者123 更新时间:2023-11-30 19:08:34 25 4
gpt4 key购买 nike

我正在做一个小项目,其中有一个全屏 GUI(Glade、GTK 和 C),需要为用户提供一种关闭屏幕的方法(显然,由于窗口是全屏,窗口管理器不可用)。

当我尝试编译这段代码时出现问题

//close sidebar1
void on_window_sidebar1_back_clicked()
{
gtk_window_close (GtkWindow *window);
}

我收到以下错误

    /usr/bin/arm-linux-gnueabihf-gcc -c -g -O0 -Wall -pthread -pipe src/main.c `pkg-config --cflags --libs gtk+-3.0` -o main.o
src/main.c: In function 'on_window_sidebar1_back_clicked':
src/main.c:61:2: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'gtk_window_close'
gtk_window_close (GtkWindow *window);
^
src/main.c:61:20: error: expected expression before 'GtkWindow'
gtk_window_close (GtkWindow *window);
^
makefile:30: recipe for target 'main.o' failed
make: *** [main.o] Error 1

我尝试遵循文档 here ,但似乎失败得很厉害

有人有什么想法吗?

附注。

如果有人感兴趣,这里是完整的 main.c。这是我第一次用gtk尝试C语言,所以不要太严厉,谢谢(=

#include <gtk/gtk.h>

GtkWidget *g_lbl_test;
GtkWidget *g_lbl_count;

int main(int argc, char *argv[])
{
GtkBuilder *builder;
GtkWidget *window;

gtk_init(&argc, &argv);

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

window = GTK_WIDGET(gtk_builder_get_object(builder, "window_main"));
gtk_builder_connect_signals(builder, NULL);

//pointers for the labels (...used in button press)
g_lbl_test = GTK_WIDGET(gtk_builder_get_object(builder, "lbl_test"));
g_lbl_count = GTK_WIDGET(gtk_builder_get_object(builder, "lbl_count"));

g_object_unref(builder);

gtk_widget_show(window);
//gtk_window_fullscreen (GtkWindow *window); //dont know how to use this, same with gtk_window_close
gtk_main();

return 0;
}

//button press (just a test to make sure the window didnt freeze)
void on_btn_count_clicked()
{
static unsigned int count= 0;
char str_count[30] = {0};

gtk_label_set_text(GTK_LABEL(g_lbl_test), "Test success!");
count++;
sprintf(str_count, "%d", count);
gtk_label_set_text(GTK_LABEL(g_lbl_count), str_count);
}

//sidebar1
void on_sidebar_1_clicked()
{
GtkBuilder *builder;
GtkWidget *window;

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

window = GTK_WIDGET(gtk_builder_get_object(builder, "window_sidebar1"));

gtk_widget_show(window);
}
//close sidebar1
void on_window_sidebar1_back_clicked()
{
gtk_window_close (GtkWindow *window);
}


// called on closing window
void on_window_main_destroy()
{
gtk_main_quit();
}

最佳答案

你可能应该打电话

 gtk_close_window(window);

但是那个窗口应该来自某个地方。

(您可以使用带有连接的 Gtk 闭包,或者带有客户端数据的回调等,或者以某种方式将该窗口存储在全局变量中,等等...)

阅读有关 C 编程的更多信息,然后阅读有关 callbacks 的一些内容和 closures ,然后阅读有关 GTK 的更多信息,以及 signal Gobject的机制。

(你的代码显示出很多困惑;我建议在阅读一本好的 C 编程书籍后阅读 Getting started with GTK 章节;顺便说一句,我建议首先写一些不是 全屏,稍后再改进)

编译时不要忘记启用所有警告和调试信息,即使用
gcc -Wall -Wextra -g 进行编译(以及其他参数,可能使用 $ (pkg-config --cflags gtk+-3.0) 以及 $(pkg-config --libs gtk+-3.0) 用于链接)。

关于c - 如何用C关闭GTK窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44972052/

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