一、簡介
雖然GTK+是Linux下的開發環境,因為其跨平台特性,有時候需要在Windows上用到它的。如下是在Windows10下配置GTK+的開發環境。
Gnome的開發基礎結構是圍繞一組函數庫的,所有的內容都是用可移植的ANSI C語言寫成的,可以用於所有類UNIX系統,與圖形相關的函數庫依賴於X Window系統。 Gnome函數庫是最高層的。GTK+由兩部分組成,GTK和GDK。 GTK層為C語言提供了一個對象模型,並為UI工具包提供了最基本的widget,它是上層GUI派生的基礎。 GTK是依賴於GDK的,GDK是Xlib的一個底層包裝,Xlib庫直接與X服務器對話。 除了Xlib以外的任何部分都是基於GLib的,它是一個有用的C函數庫,提供了很多實用程序和可移植的功能以及一組容易被C語言使用的容器。
一個Gnome程序使用多個庫組成的層次結構: Gnome庫在最高層,包括幫助例程,類和特殊的widget,並為應用程序提供一個基礎架構。第二層是GTK,它是GTK+庫的一部分。這個庫提供了基本的工具包和widget來創建GUI應用程序。大多數GUI是直接用GTK編寫的。GTK同時為Gnome庫提供了一個功能強大的對象系統。 再下一層是GDK,它簡單的對X函數庫進行了包裝,只有在我們進行特殊繪畫或設置窗口的特殊屬性的時候才會用到它. 最下面一層是Glib,它是C的一個實用程序庫,包括可移植性和一些實用程序功能,以及一些容器類,例如:鏈表,可變數組,變長字符串,HASH(貌似是哈西表),緩存,一個事件循環和其他有用的結構。
二、詳解
1、下載GTK+ 3.x
(1)進入GTK+的官方網站http://www.gtk.org/,點擊Download,選擇相應的版本進入。
(2)若要下載、解壓、整理那些單獨的文件,則不是很方便,所以就可以選擇有”All-in-one bundles” 的鏈接,點擊下載。
解壓完成,復制到/etc/gtk(也可以自定義其他目錄),可以看到一些目錄文件夾,主要包括:bin、etc、include、lib、man、manifest、share、src。其中bin目錄下主要包含一些可執行文件和動態鏈接庫,lib目錄主要包含一些庫文件、include主要包含的是一些頭文件。
注:最近可在windows下安裝MSYS2(Minimal SYStem 2),它是一個MSYS的獨立改寫版本,主要用於 shell 命令行開發環境,同時它也是一個在Cygwin (POSIX 兼容性層) 和 MinGW-w64(從"MinGW-生成")基礎上產生的,追求更好的互操作性的 Windows 軟件。它集成了pacman和Mingw-w64的Cygwin升級版, 提供了bash shell等linux環境、版本控制軟件(git/hg)和MinGW-w64 工具鏈。與MSYS最大的區別是移植了 Arch Linux的軟件包管理系統 Pacman(其實是與Cygwin的區別)。參考:https://msys2.github.io/ 。
2、配置GTK
在/etc/gtk目錄下有一個幫助文件:
- This is a bundle containing the GTK+ stack and its dependencies
- for Windows. As such it is nothing more than a combination of the
- individual packages it consists of. Here is a shortened list :
- - GTK+ 3.6.4 (patched) ;
- - GLib 2.34.3 ;
- - GDK-Pixbuf 2.26.5 ;
- - Pixman 0.26.0 ;
- - Cairo 1.10.2 (patched) ;
- - Pango 1.30.1 ;
- - ATK 2.6.0.
- Both run-time and developer packages are included.
- This bundle is intended for software developers and packagers. You are
- expected to know what to do with it, more or less.
- To use it, create some empty folder like "c:\gtk", Using either
- Windows Explorer's built-in zip file management, or the command-line
- unzip.exe, available for instance at
- ftp://tug.ctan.org/tex-archive/tools/zip/info-zip/WIN32/unz552xN.exe
- unzip this bundle. Avoid Winzip! It is known to behave oddly.
- (But you presumably already did extract the files, as you are reading
- this file.)
- Then add the bin folder to your PATH. Make sure you have no other
- versions of GTK+ in PATH. Run:
- pkg-config --cflags gtk+-3.0
- and verify that it prints out something reasonable. Prepare Pango :
- pango-querymodules > c:\gtk\etc\pango\pango.modules
- Prepare GDK-Pixbuf :
- gdk-pixbuf-query-loaders > c:\gtk\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache
- Prepare GTK+-IMModules :
- gtk-query-immodules-3.0 > c:\gtk\lib\gtk-3.0\3.0.0\immodules.cache
- Run:
- gtk3-demo
- and verify that it works.
(1)配置環境變量
右鍵開始菜單--選擇控制面板,切換到小圖標或大圖標模式選擇“系統”,點擊“高級系統設置”,選擇“環境變量”,將”C:\gtk\bin”加入到環境變量”Path”中。bin目錄中包含有運行時所需的dll文件,其中也包括gtk-demo.exe示例程序。
(2)然后按照幫助文檔執行pango-querymodules、gdk-pixbuf-query-loaders、gtk-query-immodules-3.0,接着運行GTK+的例子:
3、設置QtCreator環境
- #include <gtk/gtk.h>
- int main (int argc, char *argv[])
- {
- GtkWidget *window;
- GtkWidget *label;
- //初始化GTK+庫
- gtk_init(&argc, &argv);
- //創建主窗口
- window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- //設置窗口大小
- gtk_widget_set_size_request(window,300,300);
- //設置標題
- gtk_window_set_title(GTK_WINDOW (window), "Hello World");
- //當窗口即將被銷毀,停止主GTK+循環
- g_signal_connect(window, "destroy",G_CALLBACK (gtk_main_quit), NULL);
- //創建一個"Hello World"標簽
- label = gtk_label_new("Hello, World");
- //將標簽加入到主窗口
- gtk_container_add(GTK_CONTAINER (window), label);
- //設置窗口中的所有元素可見
- gtk_widget_show_all(window);
- //開始主循環,讓它在那里休息,直到應用程序關閉
- gtk_main();
- return 0;
- }
- CONFIG += link_pkgconfig
- PKGCONFIG += gtk+-3.0
- #-------------------------------------------------
- #
- # Project created by QtCreator 2015-08-30T02:36:02
- #
- #-------------------------------------------------
- TARGET = helloworld
- TEMPLATE = app
- CONFIG += link_pkgconfig
- PKGCONFIG += gtk+-3.0
- #INCLUDEPATH += C:/gtk/include/gtk-3.0 C:/gtk/include/cairo C:/gtk/include/pango-1.0 \
- # C:/gtk/include/atk-1.0 C:/gtk/include/cairo C:/gtk/include/pixman-1 \
- # C:/gtk/include C:/gtk/include/freetype2 C:/gtk/include C:/gtk/include/libpng15 \
- # C:/gtk/include/gdk-pixbuf-2.0 C:/gtk/include/libpng15 C:/gtk/include/glib-2.0 \
- # C:/gtk/lib/glib-2.0/include
- #LIBS += -LC:/gtk/lib -lgtk-3 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lpangocairo-1.0 \
- # -lpangoft2-1.0 -lfreetype -lfontconfig -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lm -latk-1.0 \
- # -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl
- SOURCES += main.cpp
- HEADERS +=
- #include <gtk/gtk.h>
- int main (int argc, char *argv[])
- {
- GtkWidget *window;
- GtkWidget *label;
- //初始化GTK+庫
- gtk_init(&argc, &argv);
- //創建主窗口
- window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- //設置窗口大小
- gtk_widget_set_size_request(window,300,300);
- //設置標題
- gtk_window_set_title(GTK_WINDOW (window), "Hello World");
- //當窗口即將被銷毀,停止主GTK+循環
- g_signal_connect(window, "destroy",G_CALLBACK (gtk_main_quit), NULL);
- //創建一個"Hello World"標簽
- label = gtk_label_new("Hello, World");
- //將標簽加入到主窗口
- gtk_container_add(GTK_CONTAINER (window), label);
- //設置窗口中的所有元素可見
- gtk_widget_show_all(window);
- //開始主循環,讓它在那里休息,直到應用程序關閉
- gtk_main();
- return 0;
- }
4、運行
有時會出現啟動錯誤:“無法定位程序輸入點gzdirect於動態鏈接庫zlib1.dll。原因是:安裝某些軟件在安裝時,會將zlib1.dll放入C:\Windows\System32文件夾中,就使目錄中存在舊版本的zlib1.dll,雖然GTK+安裝目錄下的bin文件中自帶zlib1.dll,但是會優先在System32文件夾中找dll文件,而這個舊版本的zlib1.dll就導致GTK+啟動出錯。解決方法:(1)將C:\Windows\System32中的zlib1.dll重命名zlib1.dll.off或zlib1.dll.old等任意名字,或者直接刪除,再啟動GTK+就能正常打開了。但這種方法有可能導致其他程序不能正常啟動。(2)將C:\gtk\bin文件夾中的zlib1.dll復制到C:\Windows\System32中,再啟動GTK+就能正常打開了。新版本的zlib也可以保證以前程序的正常啟動。
三、總結
(1)3.6.5及其最新的版本可以在網上找到http://developer.gnome.org/gtk3/。如果您正在尋找舊的GTK + 2系列磁帶庫,請參閱http://developer.gnome.org/gtk2/。
(2)若有建議,請留言,在此先感謝!
http://blog.csdn.net/taiyang1987912/article/details/48103049