GTK+淺談之一Windows10下QtCreator中GTK+環境搭建(十幾篇)


一、簡介

        雖然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目錄下有一個幫助文件:

 

[html]  view plain  copy
 
  1. This is a bundle containing the GTK+ stack and its dependencies  
  2. for Windows. As such it is nothing more than a combination of the  
  3. individual packages it consists of. Here is a shortened list :  
  4. - GTK+ 3.6.4 (patched) ;  
  5. - GLib 2.34.3 ;  
  6. - GDK-Pixbuf 2.26.5 ;  
  7. - Pixman 0.26.0 ;  
  8. - Cairo 1.10.2 (patched) ;  
  9. - Pango 1.30.1 ;  
  10. - ATK 2.6.0.  
  11.   
  12. Both run-time and developer packages are included.  
  13.   
  14. This bundle is intended for software developers and packagers. You are  
  15. expected to know what to do with it, more or less.  
  16.   
  17. To use it, create some empty folder like "c:\gtk", Using either  
  18. Windows Explorer's built-in zip file management, or the command-line  
  19. unzip.exe, available for instance at  
  20. ftp://tug.ctan.org/tex-archive/tools/zip/info-zip/WIN32/unz552xN.exe  
  21. unzip this bundle. Avoid Winzip! It is known to behave oddly.  
  22.   
  23. (But you presumably already did extract the files, as you are reading  
  24. this file.)  
  25.   
  26. Then add the bin folder to your PATH. Make sure you have no other  
  27. versions of GTK+ in PATH. Run:  
  28.     pkg-config --cflags gtk+-3.0  
  29. and verify that it prints out something reasonable. Prepare Pango :  
  30.     pango-querymodules > c:\gtk\etc\pango\pango.modules  
  31. Prepare GDK-Pixbuf :  
  32.     gdk-pixbuf-query-loaders > c:\gtk\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache  
  33. Prepare GTK+-IMModules :  
  34.     gtk-query-immodules-3.0 > c:\gtk\lib\gtk-3.0\3.0.0\immodules.cache  
  35. Run:  
  36.     gtk3-demo  
  37. 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環境

(1)首先安裝好QtCreator(具體參考網上教程)。
(2)新建空的QT項目,並添加cpp文件main.cpp
 
[html]  view plain  copy
 
  1. #include <gtk/gtk.h>  
  2.  int main (int argc, char *argv[])  
  3.  {  
  4.     GtkWidget *window;  
  5.     GtkWidget *label;  
  6.     //初始化GTK+庫  
  7.     gtk_init(&argc, &argv);  
  8.     //創建主窗口  
  9.     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);  
  10.     //設置窗口大小      
  11.     gtk_widget_set_size_request(window,300,300);  
  12.     //設置標題  
  13.     gtk_window_set_title(GTK_WINDOW (window), "Hello World");  
  14.     //當窗口即將被銷毀,停止主GTK+循環  
  15.     g_signal_connect(window, "destroy",G_CALLBACK (gtk_main_quit), NULL);  
  16.     //創建一個"Hello World"標簽  
  17.     label = gtk_label_new("Hello, World");  
  18.     //將標簽加入到主窗口  
  19.     gtk_container_add(GTK_CONTAINER (window), label);  
  20.     //設置窗口中的所有元素可見  
  21.     gtk_widget_show_all(window);  
  22.      //開始主循環,讓它在那里休息,直到應用程序關閉  
  23.     gtk_main();  
  24.     return 0;  
  25. }  
(3)添加GTK的頭文件和庫(pro文件)
      在cmd中執行命令pkg-config --cflags gtk+-3.0添加到INCLUDEPATH中,執行命令pkg-config --cflags --libs gtk+-3.0添加到LIBS中。當然也可以使用更簡單的方式:在pro文件中添加:
[html]  view plain  copy
 
  1. CONFIG += link_pkgconfig  
  2. PKGCONFIG += gtk+-3.0  
最后的pro文件是:
[html]  view plain  copy
 
  1. #-------------------------------------------------  
  2. #  
  3. # Project created by QtCreator 2015-08-30T02:36:02  
  4. #  
  5. #-------------------------------------------------  
  6. TARGET = helloworld  
  7. TEMPLATE = app  
  8. CONFIG += link_pkgconfig  
  9. PKGCONFIG += gtk+-3.0  
  10. #INCLUDEPATH += C:/gtk/include/gtk-3.0 C:/gtk/include/cairo C:/gtk/include/pango-1.0 \  
  11. #               C:/gtk/include/atk-1.0 C:/gtk/include/cairo C:/gtk/include/pixman-1  \  
  12. #               C:/gtk/include C:/gtk/include/freetype2 C:/gtk/include C:/gtk/include/libpng15 \  
  13. #               C:/gtk/include/gdk-pixbuf-2.0 C:/gtk/include/libpng15 C:/gtk/include/glib-2.0   \  
  14. #               C:/gtk/lib/glib-2.0/include  
  15.   
  16. #LIBS += -LC:/gtk/lib -lgtk-3 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lpangocairo-1.0 \  
  17. #        -lpangoft2-1.0 -lfreetype -lfontconfig -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lm -latk-1.0  \  
  18. #        -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl  
  19. SOURCES += main.cpp  
  20. HEADERS  +=  
main.cpp的代碼:
[html]  view plain  copy
 
  1. #include <gtk/gtk.h>  
  2.    
  3.  int main (int argc, char *argv[])  
  4.  {  
  5.     GtkWidget *window;  
  6.     GtkWidget *label;  
  7.     //初始化GTK+庫  
  8.     gtk_init(&argc, &argv);  
  9.     //創建主窗口  
  10.     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);  
  11.     //設置窗口大小      
  12.     gtk_widget_set_size_request(window,300,300);  
  13.     //設置標題  
  14.     gtk_window_set_title(GTK_WINDOW (window), "Hello World");  
  15.     //當窗口即將被銷毀,停止主GTK+循環  
  16.     g_signal_connect(window, "destroy",G_CALLBACK (gtk_main_quit), NULL);  
  17.     //創建一個"Hello World"標簽  
  18.     label = gtk_label_new("Hello, World");  
  19.     //將標簽加入到主窗口  
  20.     gtk_container_add(GTK_CONTAINER (window), label);  
  21.     //設置窗口中的所有元素可見  
  22.     gtk_widget_show_all(window);  
  23.      //開始主循環,讓它在那里休息,直到應用程序關閉  
  24.     gtk_main();  
  25.     return 0;  
  26. }  

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM