まず、システムにインストールされているツールキットのバージョンを使用します。最近の Linux ディストリビューションには、Qt4.8 またはQt5.0とGTK3.6以降が必要です (GTK3.8 は最近リリースされました)。GTK2 を使用しないでください。
ここでは、C++ (特に Linux) での GUI のコーディングに焦点を当てています。
私の知る限り、WxWidgets は、Windows、Qt、Gtk などの他の多くのツールキットよりも優れた非常に賢いラッパーです。移植性とシステム ネイティブ ツールキットの使用が必要でない限り、お勧めできません。Tcl/Tk は、Tcl スクリプト言語に関連付けられています。
FOX ツールキットとFLTK (どちらも C++ GUI ツールキット)もありますが、広く使用されているわけではありません。
Qt は KDE に関連し、KDE によって使用されます。Gtk は Gnome に関連し、Gnome によって使用されます。ただし、Gnome で Qt を使用するプログラム、または KDE で GTK を使用するプログラムを実行できます。
GTK は C で書かれており、独自のオブジェクト指向機構を使用しています。慣用的な C++ で GTK のコーディングを行う場合は、GTKMM (GTK 上の C++ ラッパー) の使用を検討してください。
Qt と GTK はどちらも非常に強力なツールキットです。ただし、Qt は非常に強力なGraphics Viewフレームワーク (Gtk にはまだありません) を提供します。このフレームワークを使用すると、ネストされたグラフィカル アイテムをまとめて、それぞれが独自の座標を持つことができます。対照的に、GTK は非常に強力なテキスト ビューメカニズムを提供し、ウィジェットと書式設定されたテキストを混在させることができます。私見、GTKテキストビューはQTextEditよりわずかに優れています。
ポータブル ゲームの場合は、SDLも検討してください。3D シーンでは、GTK と Qt の両方でラップされた低レベルのOpenGLを使用することができます。
最近では、Web インターフェイスも必要になる場合があります。Wtが役立つ可能性があります (プログラミング スタイルは Qt に似ています)。また、FastCGI プロトコルが関連している可能性があります。libonionやlibmicrohttpdなど、プログラム内に HTTP サーバーを埋め込むためのライブラリがいくつかあります。
Linux および Unix システム (ただし、Quartzを備えた MacOSX ではありません) では、 X11がWaylandに置き換えられる可能性があるとしても、背後にある概念を理解する必要があります。