web-dev-qa-db-ja.com

C ++でグラフィカルユーザーインターフェースを構築する方法

私のC++プログラムはすべてこれまでコマンドラインインターフェースを使用してきましたが、私が経験した他の唯一の言語はこれをサポートしていないPHPです。

C++でのグラフィカルユーザーインターフェイスプログラミングはどこから始めますか?作成方法は?

231
waiwai933

基本的に、オペレーティングシステムのウィンドウシステムは、ウィンドウの作成やウィンドウ上のボタンの配置などの作業を行うために実行できるAPI呼び出しをいくつか公開しています。基本的には一連のヘッダファイルが手に入るので、stdlibやprintfと同じように、インポートしたライブラリの関数を呼び出すことができます。

各オペレーティングシステムには、独自のGUIツールキット、一連のヘッダーファイル、およびAPI呼び出しが付属しています。 gtk、qt、wxウィジェットのようなクロスプラットフォームのツールキットもあり、どこでも動作するプログラムを構築するのに役立ちます。各プラットフォームで同じAPI呼び出しを行うことでこれを実現しますが、ネイティブOSのAPI呼び出しを呼び出すAPI関数の実装は異なります。

CLIプログラムとは異なる、それらすべてに共通していることの1つは、イベントループと呼ばれるものです。そこにある基本的な考え方はやや複雑で、そして圧縮するのが難しいですが、本質的にそれはあなたのメインクラス/メイン関数に多くの地獄が起こっていないことを意味します、

  • 新しいイベントがある場合は、イベントキューを確認してください。
  • もしあれば、それらのイベントを適切なハンドラに送ります。
  • 完了したら、オペレーティングシステムに制御を戻します(通常、特殊な "sleep"、 "select"、または "yield"関数呼び出しを使用)。
  • そうすれば、オペレーティングシステムが終了したときにyield関数が戻ってきて、ループを一周することになります。

イベントベースのプログラミングに関するリソースはたくさんあります。 JavaScriptの使用経験がある場合でも、基本的な考え方は同じです。スクリプト作成者がイベントループ自体にアクセスしたり制御したりすることはできません。イベントがある場合は、ハンドラを作成して登録するのが唯一の仕事です。

一般に、GUIプログラミングは非常に複雑で困難であることに留意してください。選択肢がある場合は、組み込みWebサーバーをプログラムに統合し、HTML/Webベースのインターフェースを使用する方がはるかに簡単です。私が遭遇した1つの例外は、私が見たことがあるGUIプログラミングに不慣れな人々のためにそれを簡単に最も親しみやすい環境にするAppleのココア+ xcode +インターフェースビルダー+チュートリアルです。

136
Breton

たくさんあります 無料のポータブルGUIライブラリそれぞれに長所と短所があります。

特に Qtは素敵なチュートリアル とあなたが始めるのを助けるツールを持っています。楽しい!

しかし、あなたがするべきであることに注意してください プラットフォーム固有を避ける Win32 APIやMFCなどの機能。それはあなたに特定のプラットフォームを不必要に結び付け、ほとんど利点はありません。

146
vog

OSに依存しないアルゴリズム「C++で3つのステップでGUIアプリケーションを作成する

  1. Qt Creatorをインストール

    enter image description here

  2. 新しいプロジェクトを作成する(Qt Widgetsアプリケーション)

    enter image description here

  3. それを造りなさい。

おめでとうございます、あなたはC++であなたの最初のGUIを手に入れました。

これで、たくさんの ドキュメント を読んで "Hello world" GUIアプリケーションよりも複雑なものを作成する準備が整いました。

68

「例としてWindows XPを言う」というコメントを考えると、あなたのオプションは次のとおりです。

  • そのAPIを介してオペレーティングシステムと直接対話します。MicrosoftWindowsの場合、サプライズコール Windows API です。 WinAPIの最も確実な参照は、Microsoftの MSDN Webサイト です。そのために人気のあるオンライン初心者向けチュートリアルは theForgerのWin32 APIプログラミングチュートリアル です。そのための古典的な本はCharles Petzoldの Programming Windows、5th Edition です。

  • WinAPIをC++クラスにラップする MFC などのプラットフォーム固有のライブラリ(OSとコンパイラの両方)を使用します。そのための参照はまたMSDNです。そのための古典的な本は、Jeff Prosiseの MFCを使ったプログラミングウィンドウ、2nd Edition です。例えばCodeGear C++ Builderを使用している場合、ここでのオプションは VCL です。

  • GTK + (C++ラッパー: gtkmm )などのクロスプラットフォームライブラリを使用してください。 、 QtwxWidgets 、または )特定のOSのAPIをラップする_ fltk _ 。これらの利点は、一般に、あなたのプログラムはソースコードを変更する必要なしに異なるOSのためにコンパイルされることができるということです。すでに述べたように、それぞれに長所と短所があります。どちらを使用するかを選択する際の1つの考慮事項は、そのライセンスです。与えられた例では、GTK +&gtkmmはLGPLの下でのライセンスであり、Qtは独自のオプションを含む様々なライセンスの下で、wxWidgetsはそれ自身のwxWindowsライセンスの下で(wxWidgetsライセンスへの名前変更を含む)参照、チュートリアル、または本については、詳細についてそれぞれのWebサイトを参照してください。

23
KTC

私はすでにあなたのいるところにいるので、私はあなたに「答える」ことができると思います。

実際のところ、GUIを作成する簡単な方法はありません。 GUIはプラットフォームやOS固有のコードに大きく依存しているので、ウィンドウ管理APIについてターゲットのプラットフォーム/ OSのドキュメントを読み始めるべきです。良いことは、これらの制限と抽象的なアーキテクチャーの違いを単一のマルチプラットフォームAPIにまとめたライブラリがたくさんあることです。以前に提案されたもの、GTKとQTは、これらのライブラリのいくつかです。

しかし、たくさんの新しい概念、データ型、名前空間、クラスが一度に導入されるため、これらでさえも少し複雑です。このため、彼らはいくつかのGUI WYSIWYGエディタに同梱されています。それらはGUIを使ったプログラミングソフトウェアをほぼ可能にします。

まとめると、MicrosoftのVisual StudioのようなGUI開発のための無料ではない「環境」もあります。 Delphiの経験がある人のためには、Visual Studioの方が慣れているでしょう。 Microsoftから提供されている完全なVisual Studio環境に代わる無料の方法もあります。 Visual Studio Express 。これはGUI開発を始めるのに十分すぎるほどです。

18
Spidey

私は「簡単な」チュートリアルのあるWebサイトを見つけました。 http://www.winprog.org/tutorial/start.html

15
ZippyV

Qtは最高です。

6
ufukgun

C++で.NET Windows GUIを簡単に作成できます。

MSDN の次のチュートリアルを参照してください。あなたは 無料 のためにあなたが(Visual C++ Express)を必要とするすべてをダウンロードすることができます。

もちろんあなたは.NETに縛られていますが、ただ遊んでいるかWindowsアプリケーションしか必要としていないのであれば大丈夫でしょう(今のところほとんどの人はまだWindowsを持っています...)。

3
Justicle

QTは無料ではないので、私はFLTKを使います。私はwxWidgetsを選びません。というのも、単純なhello worldプログラムを使った最初のテストでは、実行可能ファイルが24MB、fltk 0.8MBです。

3
pernecker