gtk源碼分析
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系統編程.