Tag: gtk

从Web获取文件:在GTK中使用C

我应该使用什么函数使用gtk libs从Web获取文件? 如果我的文件来自: gchar * path =“http://xxx.yyyServer/sharing/temp.txt” 我该怎么做才能下载它? 对于本地文件,我只使用像fopen和fread这样的C库。 我该怎么办? 遗憾的是,教程中没有文件处理的例子。 我只能从文件对话框中看到文件选择器。 请帮助这个菜鸟。 谢谢 使用注释中的工作代码更新:以下代码适用于未知大小的二进制文件。 char *name= http://127.0.0.1:8000/mybinfile int getFile(char *name) { GFile *f = g_file_new_for_uri(name); GFileInputStream *fis = NULL; GDataInputStream* dis = NULL; GError *err = NULL; //char buffer[2048]; char *buffer; size_t length; int ret = -1; GFileInfo *info; int total_size = -1; /* […]

如何正确(和有效)释放gtk小部件中的内存

我正在尝试了解如何在完成GTK小部件时正确释放内存,例如,如果我需要创建和销毁许多小部件。 但是,无论我尝试什么,valgrind似乎都表明内存泄漏。 我已经查看了其他问题,包括列出GTK的valgrind抑制文件的问题,但它没有改变结果。 这是重现我的问题的最简单的代码片段: #include “gtk/gtk.h” int main() { GtkWidget * widget = gtk_fixed_new(); g_object_ref(widget); g_object_ref_sink(widget); // remove floating reference, and own this object ourselves g_object_unref(widget); gtk_widget_destroy(widget); } 我的期望是(在处理浮动引用之后),unref()函数应该将引用计数减少到零,然后释放所有内存。 我把gtk_widget_destroy()放在那里以获得良好的衡量标准,但我不确定它实际上是否必要(并且它不会改变泄漏的大小)。 使用valgrind命令输出G_SLICE=debug-blocks valgrind ./t3 –supression=~/Downloads/GNOME.supp来自GTK hello_world程序中的Memory Leaks问题是 ==10079== HEAP SUMMARY: ==10079== in use at exit: 164,338 bytes in 847 blocks ==10079== total heap usage: 1,380 allocs, […]

有没有一个很好的方法来复制Gtk小部件?

有没有办法,使用C中的Gtk库来克隆Gtk按钮(例如),并将其打包到应用程序中的其他位置。 我知道你不能两次打包相同的小部件。 并且这段代码显然不起作用,但显示当我尝试按钮的浅表副本时会发生什么: GtkButton *a = g_object_new(GTK_TYPE_BUTTON, “label”, “o_0”, NULL); GtkButton *b = g_memdup(a, sizeof *a); gtk_box_pack_start_defaults(GTK_BOX(vbox), GTK_WIDGET(b)); 周围的代码创建了一个vbox并将其打包在一个窗口中并运行gtk_main()。 这将导致这些难以理解的错误消息: (main:6044): Gtk-CRITICAL **: gtk_widget_hide: assertion `GTK_IS_WIDGET (widget)’ failed (main:6044): Gtk-CRITICAL **: gtk_widget_realize: assertion `GTK_WIDGET_ANCHORED (widget) || GTK_IS_INVISIBLE (widget)’ failed ** Gtk:ERROR:/build/buildd/gtk+2.0-2.18.3/gtk/gtkwidget.c:8431:gtk_widget_real_map: assertion failed: (GTK_WIDGET_REALIZED (widget)) 同样,如果我要编写自己的GObject(不一定是Gtk小部件),是否有一种编写复制构造函数的好方法。 我认为它应该是一个带有可选钩子的接口,主要基于属性,以某种方式处理类的层次结构。 我想这样做: GtkButton *b = copyable_copy(COPYABLE(a)); 如果GtkButton可以使用理论上的可复制接口。

可以通过gtk_menu_popup发布焦点显示gtk菜单吗?

我正在重构一些代码,通常需要用户单击按钮才能显示弹出菜单(它出现在按钮旁边),如果用户将鼠标hover在按钮上,我要做的就是显示弹出菜单预设持续时间的图标,如果用户移动到另一个按钮图标,则再次隐藏它。 但是,通过gtk_menu_popup激活菜单会窃取鼠标和键盘焦点,我在尝试抓取按钮小部件的焦点方面几乎没有取得任何进展。 是否可以将焦点返回到按钮图标?

GTK定时器 – 如何在帧内制作定时器

g_timer_new如何工作? 有可能做一个 char timerz[50]; GTimer *timer g_timer_start(GTimer *timer); strcpy(timerz,(g_timer_elapsed(GTimer *timer)) 或者我该怎么做才能在gtk_frame中有一个计时器? 祝你今天愉快! :d

如何在C中获取gtk窗口的gdk窗口?

我正在尝试将光标设置为手表。 问题是gdk_set_cursor()需要一个gdk_window。 如何在C中获取gtk_window的gdk_window? 我见过gtkmm和pygtk的例子,但我找不到相应的C函数。

使用MinGW帮助在Windows上编译GTK +

我正在尝试在Windows上编译一个简单的GTK + Hello World应用程序。 我正在关注此url的教程: http://pandhare0.tripod.com/#mini-Tutorial 我的HelloWorld.c的内容如下,也取自维基百科示例: #include int main (int argc, char *argv[]) { GtkWidget *window; GtkWidget *label; gtk_init (&argc, &argv); /* create the main, top level, window */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); /* give it the title */ gtk_window_set_title (GTK_WINDOW (window), “Hello World”); /* Connect the destroy signal of the window to gtk_main_quit […]

对Raspberry PI进行交叉编译

我正在为Raspberry PI开发板编写GUI应用程序,该应用程序利用OpenCV库来处理一些图像数据。 最终结果是带有一些按钮的图形应用程序,以及显示图像的区域。 我尽可能地避免使用IDE,因为除了通常与我工作的项目一起使用的新语言之外,每个工具都需要学习一个新的IDE是很乏味的。 我所有开发的95%都在VIM中。 如何设置一个基本的makefile项目,该项目使用GCC,OpenCV,GTK +,并为在x86系统上运行的Ubuntu安装上运行的Raspberry PI(即:arm11)进行编译? 目标是使这个可以在任何Linux系统上构建的可移植项目。 我熟悉通过apt-get安装OpenCV和GTK +库,我也知道我需要在main.c文件中包含特定的头文件。 现在我只需要弄清楚makefile中为ARM编译所需的基本语句,并链接到相应的库。 我通过apt-get获得的OpenCV库似乎是针对x86的,我不知道是否包含了ARM变体。 谢谢。

如何使用转义键编程窗口关闭

我一直在寻找如何使用转义键关闭我的程序。 并不是很多人使用GTK +我认为。 此外,如果不是要求太多,有人可以告诉我如何使用Gnome开发者网站,以便我可以自己找到这些东西吗? 谢谢。 所以,用转义键关闭窗口,这是我的代码: #include #include #include #include #include #include #define KEY_ESC ‘\033’ static GtkWidget *entry; static gboolean kill_window(GtkWidget *widget, GdkEvent *event, gpointer data) { gtk_main_quit(); return FALSE; } static void button_press(GtkWidget *widget, gpointer data) { const char *text = gtk_entry_get_text(GTK_ENTRY(entry)); //system(“cd” text); //printf(“%s\n”, text); const char *text2 = “&”; char *concatenation; concatenation […]

如何在GtkTable上实现按钮按事件

在网上搜索答案不会让我解决我的问题: 如果我点击一个单元格,我不想发布一个事件。 由于没有单击事件,接受GtkButton ,我想实现GDK_BUTTON_PRESS_MASK和GDK_BUTTON_RELEASE_MASK以在点击期间捕获表上鼠标的位置。 适用于GtkDrawingArea! 尝试了snipet轰鸣声,但没有任何事情发生,也许有人可以给我一个线索:) 小样本: static void table_press(GtkWidget *widget, GdkEventButton *event) { printf(“table pressed”); } int main(int argc, char **argv) { GtkWidget *window; GtkWidget* table; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW (window), “table click”); table = gtk_table_new(2, 5, TRUE); gtk_container_add(GTK_CONTAINER (window), table); gtk_widget_add_events(table, GDK_BUTTON_PRESS_MASK); g_signal_connect(GTK_OBJECT (table), “button-press-event”, G_CALLBACK (table_press), NULL); g_signal_connect_swapped(G_OBJECT(window), “destroy”, G_CALLBACK(gtk_main_quit), […]