当前位置:首页 » 操作系统 » gtk源码分析

gtk源码分析

发布时间: 2022-08-09 21:36:55

1. gtk 是免费的吗

是免费的。
最初,GTK+ 是作为另一个着名的开放源码项目 —— GIMP —— 的副产品而创建的。在开发早期的 GIMP 版本时,创建了 GTK作为 Motif 工具包的替代,在那个时候不是免费的。现在就是免费的,

2. gtk拖放打开文件 在下想用Gtk实现类似于vc编程里的WM_DROPFILES功能,请G

我不清楚VC是如何的,拖放文件打开,是从GNOME的文件管理器naulitus中拖的吗。

我实现了一个简单的,不知道是不是你要的。

这个程序可以从naulitus中拖一个文件到窗口的GtkEntry中,



源代码如下,如果有什么问题再问吧。

#include <gtk/gtk.h>

/* 必须有这个,不然on_drag_data_received会调用两次
* 具体为什么我也不清楚,暂时就用这个方法来屏蔽掉一次
*/
static gboolean on_drag_drop()
{
return TRUE;
}

static void on_drag_data_received(GtkWidget *widget,
GdkDragContext *context,
gint x,gint y,
GtkSelectionData *data,
guint info,
guint time,
gpointer user_data)
{
GdkAtom atom=gtk_selection_data_get_data_type(data);
if(gtk_targets_include_uri(&atom,1)){
gchar **uris=gtk_selection_data_get_uris(data);
gint i=0;
while(uris[i]!=NULL){
g_printf("%s ",uris[i]);
i++;
}
gtk_entry_set_text(GTK_ENTRY(widget),uris[0]);

/* 使用默认程序打开 */
g_app_info_launch_default_for_uri(uris[0],NULL,NULL);
g_strfreev(uris);
}

gtk_drag_finish(context,TRUE,TRUE,time);
}

int main(int argc,char *argv[])
{
gtk_init(&argc,&argv);
GtkWidget *window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window),380,160);
g_signal_connect(G_OBJECT(window),"destroy",
G_CALLBACK(gtk_main_quit),NULL);

GtkWidget *entry=gtk_entry_new();
GtkTargetEntry targets={
"text/uri-list",
GTK_TARGET_OTHER_APP,
1
};
gtk_drag_dest_set(entry,
GTK_DEST_DEFAULT_DROP,
&targets,1,
GDK_ACTION_COPY);
g_signal_connect(G_OBJECT(entry),"drag-data-received",
G_CALLBACK(on_drag_data_received),NULL);
g_signal_connect(G_OBJECT(entry),"drag-drop",
G_CALLBACK(on_drag_drop),NULL);

gtk_container_add(GTK_CONTAINER(window),entry);

gtk_widget_show_all(window);
gtk_main();
return 0;
}

3. 用c语言写了学生信息管理系统,想用gtk把图形界面做出来,详细地说要怎么做

楼上的都回答的什么啊。
都什么年代了,还MFC?那东西又笨重 又麻烦,windows上用最新的winform
你要想要GTK做界面,首先要搭建 GTK的开发环境
http://www.gtk.org/download-linux.html 去上面给库的源代码下载下来自己make,你下载已经编译好的动态库也可以。

然后开始看GTK的开发文档,里面有很多很详细的例子,会一步一步教你怎么调GTK的函数!就像刚开始学C语言一样,如果搭环境有问题的话,就自己网络“gtk linux环境搭建”,如果你用Ubuntu作为你的开发平台的话,搭建环境应该很简单,几个APT-GET就搞定了!

祝你好运
[email protected]

4. IA__gtk_widget_show: assertion `GTK_IS_WIDGET (widget)' failed

我也遇到类似的问题:
gtk_widget_get_screen (window);//代码1,错误信息如下
IA__gtk_widget_get_screen: assertion `GTK_IS_WIDGET (widget)' failed
具体原因是:传递给gtk_widget_get_screen函数的window参数未实例化
修改代码:
GtkWidget *window;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL); //实例化
gtk_widget_get_screen (window);//代码1
这样就好了。

类似于我的问题,你的bug原因应该在gtk_widget_show中的某个控件未实例化。
可以用if(label)判断判断该控件是否存在(或者说实例化)。

5. gnome和xfce都是用gtk编写的,那么这两个桌面之下的窗口应用程序是不是通用的

以下内容是引用:
QT和GTK当然在KDE和GNOME下都能用。
GTK一直是源码开放的,而QT有商业版和自由版之分。
QT也可以在WINDOWS和MAC上开发。
QT的文档资料和实例程序比GTK丰富得多得多。
我个人更喜欢QT(cute),QT的类库以Q开头,而GTK的类库以长长的一串Gtk_Widget开头,有点儍。
不过,我偶尔遇到过QT程序在GNOME下出错,却不曾遇到GTK程序在KDE下出错的。

6. GTK是什么意思

最初,GTK+ 是作为另一个着名的开放源码项目 —— GNU Image Manipulation Program (GIMP) —— 的副产品而创建的。在开发早期的 GIMP 版本时,Peter Mattis 和 Spencer Kimball 创建了 GTK(它代表 GIMP Toolkit),作为 Motif 工具包的替代,后者在那个时候不是免费的。(当这个工具包获得了面向对象特性和可扩展性之后,才在名称后面加上了一个加号。)这差不多已经 10 年过去了。今天,在 GTK+ 的最新版本 —— 2.8 版上,仍然在进行许多活动,同时,GIMP 无疑仍然是使用 GTK+ 的最着名的程序之一,不过现在它已经不是惟一的使用 GTK+ 的程序了。已经为 GTK+ 编写了成百上千的应用程序,而且至少有两个主要的桌面环境(Xfce 和 GNOME)用 GTK+ 为用户提供完整的工作环境。为什么使用 GUI 工具包?使用 GTK+ 这样的库比起编写自己的 GUI 代码来有多个优势。例如,它可以显着节约开发时间,让开发人员把精力集中在项目真正重要和真正独特的地方,而不必重复公共的功能。对于用户来说,这意味着他们使用的应用程序之间具有更好的一致性:工具包能在哪使用,应用程序就能跟到哪里。就像使用 LEGO 一样,所有的人都使用同一兼容尺寸这一事实,意味着设计可以在使用库的人之间共享,不论他们在哪里使用它。在现实中,现代的 GUI 工具包做的工作不仅仅是避免重复。它们提供了许多高级功能,用户希望在他们的应用程序中拥有这些功能,但是用别的方法得不到这些功能,因为在这类工具包上所投入的时间和工作,要远远超过在单一应用程序上的花费。所以,如果在应用程序中使用 GUI 对您来说很重要,那么请使用工具包。除此之外别无他法。现在剩下的惟一问题就是,应当使用哪个工具包?GTK+ 的优势不论开发的需要是什么,GTK+ 可能就是您正在寻找的答案。GTK+ 提供了许多东西:它既现代,而且得到了积极的开发与维护,围绕它有一个充满活力的社区。 它提供了广泛的选项,用于把工作扩展到尽可能多的人,其中包括一个针对国际化、本地化和可访问性的完善的框架。 它简单易用,对开发人员和用户来说都是这样。 它的设计良好、灵活而可扩展。 它是自由软件,有一个自由的开放源码许可。 它是可移植的,从用户和开发人员的角度都是这样。 现代的且开发积极的工具包GTK+ 是采用软件开发中的最新技术开发的,只要发现缺陷(肯定有缺陷,因为没有任何软件是完美的),开发人员就会尽力在下一版本中修补缺陷。使用现代的软件意味着,您不会陷在过时的工作中,而跟不上时代的发展。持续的维护和开发也意味着您拥有影响工具包的未来发展方向的能力。另外,在出现新的发行版时,会引入基于用户反馈的新特性和新功能,而旧的问题则得到修补。国际化、本地化和可访问性在创建要让所有人使用的软件的时候,请记住三个关键字:国际化、本地化和可访问性(通常分别缩写为 i18n、l10n 和 a11y)。国际化 是将程序准备为被母语不是开发应用程序所采用的语言的人使用的过程,所以应用程序不依赖于对任何特定语言的任何假设。

7. GTK+中的g_signal_connect()与gtk_signal_connect()有什么区别,g_callback与g_func又有什么区另呀!

信号系统已从 GTK 移到 GLib,因此在函数和类型的说明中有前缀 "g_" 而不是 "gtk_".因此带有"gtk_"的基本上都是老版本的GTK.
GTK+ 是作为另一个着名的开放源码项目 —— GNU Image Manipulation Program (GIMP) —— 的副产品而创建的。在开发早期的 GIMP 版本时,Peter Mattis 和 Spencer Kimball 创建了 GTK(它代表 GIMP Toolkit),作为 Motif 工具包的替代,后者在那个时候不是免费的。(当这个工具包获得了面向对象特性和可扩展性之后,才在名称后面加上了一个加号。)

8. linux下的gtk是什么有什么用

GTK(GIMP Toolkit)是一个Linux平台下基于Xwindow图形窗口的图形用户编程接口工具,可以借助它来开发Linux平台下基于Xwindow的图形用户界面。通俗点讲,和java中的swing图形开发工具包类似.它注册完全免费,所以用来开发自由软件或商业软件都不需要花费什么。现在很多Linux集成系统都已经将GTK1.2版本打包进去了。包括RedHat Linux 6.0以上版本,还有中文化的Turbo Linux等等。它也越来越被普遍的应用于UNIX系统编程.

热点内容
电脑登陆加密 发布:2025-01-16 05:21:57 浏览:151
安卓怎么修复闪退 发布:2025-01-16 05:21:54 浏览:553
易盾加密 发布:2025-01-16 05:20:51 浏览:893
html上传图片的代码 发布:2025-01-16 05:16:55 浏览:600
搭建服务器租用电信的怎么样 发布:2025-01-16 05:12:32 浏览:49
phpmysql源码下载 发布:2025-01-16 05:12:31 浏览:210
python安装依赖包 发布:2025-01-16 05:11:45 浏览:996
澳门云主机品牌服务器 发布:2025-01-16 05:06:55 浏览:769
数据库设计主要内容 发布:2025-01-16 05:02:02 浏览:12
存储过程如何修改 发布:2025-01-16 05:01:55 浏览:633