GTK 入門チュートリアル

GTK 入門チュートリアル

1. GTK の概要

  GTK (GIMP Toolkit) は、ソース コードが LGPL ライセンスに基づいて配布されているクロスプラットフォーム グラフィックス ツールキットです。元々は GIMP 用に書かれたものですが、強力な機能と柔軟な設計を備えた汎用グラフィックス ライブラリとなり、GNU/Linux でグラフィカル インターフェイス アプリケーションを開発するための主流の開発ツールの 1 つとなっています。もちろん、GTK はクロスプラットフォームもサポートしており、Unix 系システム、Windows、さらには携帯電話プラットフォームもサポートしています。
  GTK は C 言語で書かれているため、ネイティブ API はすべて C 指向ですが、同時にオブジェクト指向機能を C 言語レベルで実装していることが大きな特徴です。GTK は完全に無料であり、LGPL 契約に基づいています。LGPL 契約により、ソフトウェアのソース コードを開かずに、プライベート ソフトウェアがリンクを通じて GTK を使用できることが保証されます。これは、GPL 契約とは異なり、商用アプリケーションにとってよりフレンドリーです。また、初期の段階で Gnome (GTK に基づいて作成された) が KDE (QT に基づいて作成された) よりも優れたパフォーマンスを発揮したのも、LGPL 契約のおかげです。
  現在の開発傾向によれば、GTK+ はますます Linux と GNOME のネイティブ ツールキットになりつつあり、クロスプラットフォームに対する考慮はますます少なくなっています。GNOME は依然として Linux プラットフォームで最も主流のデスクトップ システムであり、Pantheon や Cinnamon などのデスクトップは単なる GNOME シェルであり、最下層も GNOME テクノロジー スタックであるため、GTK+ はこの分野で今後も大きな進歩を遂げるでしょう。
ここに画像の説明を挿入

2.GTKとGTK+

  上記では gtk についてのみ述べましたが、私が学びたいのは gtk+ です。彼らの間にはどのような関係があるのでしょうか?gtk+ の作者の 1 人である Perter Mattis 氏は、彼が当初開発した gtk には libglib、libgdk、libgtk という 3 つの関数ライブラリが含まれていたが、これらのライブラリはオブジェクト指向の仕組みを採用していなかったため、関数の再利用を実現できなかったと述べています。コンポーネント、およびメッセージ メカニズムは、現在の gtk+ によって提供されるシグナル メカニズムではなく、標準のコールバック メカニズムを使用しました。「+」は、元のバージョンと新しいバージョンを区別するために使用されます。gtk+ は依然として完全に C 言語を使用して開発されていますが、設計にはオブジェクト指向設計 (OOD) の考え方が柔軟に使用されています (OOD できるのは C++、Java、C# などの言語だけだと誰が言っています) 。

3. Linux での最初の GTK プログラム

3.1 GTK がシステムにインストールされているかどうかを確認する

  pkg-config コマンドを使用すると、インストールされているライブラリの詳細情報を表示できます。

$ pkg-config  --list-all | grep gtk
gtk-sharp-3.0                  Gtk - Gtk
gtk+-unix-print-2.0            GTK+ - GTK+ Unix print support
gtk+-x11-2.0                   GTK+ - GTK+ Graphical UI Library (x11 target)
gtk+-2.0                       GTK+ - GTK+ Graphical UI Library (x11 target)

3.2 最初の GTK プログラム例

#include <gtk/gtk.h>
int main(int argc,char *argv[])
{
    
    
	/* GtkWidget 是构件的存储类型 */
	GtkWidget *window;
	/*每一个GTK程序都要调用*/
	gtk_init(&argc, &argv);
	/*创建一个新的窗口*/
	window= gtk_window_new(GTK_WINDOW_TOPLEVEL);
	/*设置窗口标题*/
	gtk_window_set_title(GTK_WINDOW(window),"GTK Hello");
	/*设置窗口大小*/
	gtk_widget_set_usize(window, 200, 200);
	/*显示窗口*/
	gtk_widget_show_all (window); 
	/*所有的 GTK 程序必须有一个 gtk_main() 函数。
	程序运行停在这里等待事件 (如键盘事件或鼠标事件) 的发生。 */
	gtk_main();
	return 0;
}
  • プログラムのコンパイル:
gcc main.c  `pkg-config --cflags --libs gtk+-2.0`

ここに画像の説明を挿入

  • コンパイルパラメータ:

  pkg-config --cflags gtk±2.0 はインクルード ディレクトリをリストし、pkg-config --libs gtk±2.0 はコンパイルおよびリンクされたライブラリをリストします。また、次のように組み合わせることができます: pkg-config --cflags --libs gtk± 2.0 。
  ここで「コマンド置換」が使用されます。コマンド置換 (コマンド置換) を使用すると、あるコマンドの出力をキャプチャして、別のコマンドに置き換えることができます。この一重引用符は、Enter キーの左側ではなく、ESC キーの下にあります。

  • 接続時によく使用されるライブラリ:
• GTK 库(-lgtk),构件库,基于GDK。
• GDK 库(-lgdk),Xlib库的封装(wrapper)。
• gdk-pixbuf 库(-lgdk_pixbuf),图像处理库。
• Pango 库(-lpango),处理国际化文本。
• gobject 库(-lgobject),包含作为 GTK 基础的类型系统。
• gmodule 库(-lgmodule),动态运行库。
• GLib 库(-lglib),包含各种函数; GTK是基于 GLib 的,因此你总需要这个库。
• Xlib 库(-lX11),GDK 要使用。
• Xext 库(-lXext),包含共享内存位图和其它 X 扩展。
• math 库(-lm),数学库,这个被 GTK 因各种目的而使用。

3.3 関連機能インターフェースの紹介

  1. gtk の初期化 gtk_init

void gtk_init (int *argc, char ***argv)
関数: gtk の初期化。各 gtk プログラムで呼び出されます。この関数は、デフォルトのビデオ (ビジュアル) とカラー マッピング モード (カラー マップ) を設定します。

  1. gkt メイン処理ループ gtk_main

void gtk_main (void)
関数:プログラムがここで実行されると、GTK は「スリープ状態」になり、X イベント (ボタンやキーボードの押下など)、タイムアウト、またはファイル IO 通知が発生するのを待ちます。ただし、gtk_main_quit 関数を呼び出す前に、gtk_main 関数の呼び出しは返されません。ウィンドウを閉じても、プログラムはまだ実行中です (上記の例はこの効果を示しています)。この場合、gtk_main 関数を呼び出す前に、まず確立する必要があります。 function コールバック関数を使用し、特定の信号が現れた場合に代わりにアプリケーション ソフトウェアが実行され、アプリケーション ソフトウェアが処理するように GTK+ を設定します。

  • 参考資料:
      1. GTK2.0+ 入門チュートリアル
      2. GTK 公式 Web サイト: https://www.gtk.org/

おすすめ

転載: blog.csdn.net/weixin_44453694/article/details/127341241