C ++でグラフィカルユーザーインターフェイスを構築するにはどうすればよいですか?[閉まっている]


270

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

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


4
場合によります。どのようなオペレーティングシステムをターゲットにしていますか?多くのGUIフレームワークはOS固有です。
マイケル・ラタナピンサ、2009

3
どのOS /プラットフォームですか?または、クロスプラットフォームのGUIアプリを作成することに興味がある場合は、そう言ってください-これらはC ++に大きな違いを
もたらし

3
PHPはGUIプログラムの作成をサポートしています。コマンドラインからPHPプログラムを実行できない理由はありません。また、PHP-GTK gtk.php.netやPHP-Qt php-qt.orgのようなguiライブラリが役立つので、必要な理由を評価することもできます。 c ++。c ++でのGUIの記述は他の多くの言語よりも難しく、c ++コードをPython、C#、PHPから呼び出し可能なライブラリ、またはGUIのコーディングが少し簡単なライブラリにバンドルできる場合があります。
kibibu 2009

6
あなたの質問は非常に幅広いので、ツールキットの名前だけではなく、いくつかのチュートリアルだけでも欲しくないと思います。APIや例だけではなく、実際に概念がわかるような書籍が必要です。KTCは以下を推奨していますが、私が試してみるためにどのツールキットを選んでも、あなたが読んでもらえるツールキットを必ず見つけてください。
クォーク

6
「c ++でのGUIの記述は、他の多くの言語よりも難しい」この主張の根拠は何ですか。
piotr 2009

回答:


163

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

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

CLIプログラムとは異なり、それらすべてに共通する1つのことは、イベントループと呼ばれるものです。基本的な考え方はやや複雑で、圧縮が困難ですが、本質的には、メインクラス/メイン関数に次のような例外はありません。

  • 新しいイベントがあるかどうかイベントキューを確認します
  • ある場合は、それらのイベントを適切なハンドラーにディスパッチします
  • 完了したら、制御をオペレーティングシステムに戻します(通常、何らかの特別な「スリープ」、「選択」、または「yield」関数呼び出しを使用)。
  • 次に、オペレーティングシステムが完了すると、yield関数が返され、ループをもう1回実行します。

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

一般に、GUIプログラミングは非常に複雑で難しいことに注意してください。オプションがあれば、プログラムに組み込みWebサーバーを統合し、HTML / Webベースのインターフェースを用意する方が実際にははるかに簡単です。私が遭遇した1つの例外は、AppleのCocoa + Xcode +インターフェイスビルダー+チュートリアルです。これにより、GUIプログラミングを初めて使用する人にとって、私が見た中で最も親しみやすい環境になります。


プログラムに組み込みのWebサーバーを統合し、html / webベースのインターフェイスを用意するほうが実際にははるかに簡単です。」複雑な機能(複雑なUI、カスタムコントロール、アニメーションなど)を実行したい場合は、はい。(通常のコントロールとネイティブの感覚を備えた)典型的なGUIが単に必要な場合は、必要ありません。
ドングリ

167

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

特にQtには、使い始めるのに役立つ素晴らしいチュートリアルとツールがあります。楽しい!

ただし、Win32 APIやMFCなどのプラットフォーム固有の機能は使用しないでください。これにより、特定のプラットフォームに不必要に結びつき、ほとんどメリットがありません。


25
個人的には、Win32 APIへのプログラミングは素晴らしいと思います。私はQtを使用するよりもずっと気に入っています。それ自体がメリットです。多分それは私だけです。
mrduclaw、2009

6
私の個人的な経験は正反対です。Win32 APIは、他のどのAPIよりも私に面倒を引き起こしました。
VOG

17
@mrduclaw、「Win32 APIへのプログラミングは素晴らしいと思います」私は、移植可能なコードを書くためにあらゆる費用をかけて試みます。(例外があるため、「試してみる」という言葉を使用したことに注意してください...)移植性のないコードを記述することは、どのように「美しい」と見なされますか?
Trevor Boyd Smith、

11
@Trevor Boyd Smith:異なる目標だと思います。私がこれまでに専門的に書いたコードのほとんどがクロスプラットフォームである可能性はほとんどなかったので、それは私にとって決して問題ではありませんでした。
mrduclaw 2011

1
数百万ドルの質問は、ゲームトレーナーに小さなexeだけを提供する人とそのプログラムには美しいUIがあるので、サードパーティのライブラリにそれらを提供しないUIをどのように構築するのでしょうか。
user889030

74

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

  1. Qt Creatorをインストールする

    ここに画像の説明を入力してください

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

    ここに画像の説明を入力してください

  3. それを構築します。

おめでとうございます。C++での最初のGUIができました。

これで、「Hello world」GUIアプリケーションよりも複雑なものを作成するために、多くのドキュメントを読む準備ができました。


以前は、他のGUIが初心者向けではないという問題がありました。しかし、Qtにはすばらしいチュートリアルがいくつかあります。推薦ありがとうございます!
JD、

23

「例としてWindows XPを例に挙げて」のコメントを考えると、オプションは次のとおりです。

  • APIを介してオペレーティングシステムと直接やり取りします。これは、Microsoft Windowsの場合、Windows APIを呼び出すと驚きます。WinAPIの最も信頼できるリファレンスは、MicrosoftのMSDN Webサイトです。そのための人気のあるオンライン初心者向けチュートリアルは、theForgerのWin32 APIプログラミングチュートリアルです。その古典的な本は、Charles PetzoldのProgramming Windows、5th Editionです。

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

  • GTK +(C ++ラッパー:gtkmm)、QtwxWidgetsFLTKなどのクロスプラットフォームライブラリを使用する特定のOSのAPIをラップします。これらの利点は、一般に、ソースコードを変更せずにプログラムをさまざまなOS用にコンパイルできることです。すでに述べたように、それぞれに長所と短所があります。使用するものを選択する際の1つの考慮事項は、そのライセンスです。上記の例では、GTK +とgtkmmはLGPLに基づくライセンスであり、Qtは独自のオプションを含むさまざまなライセンスに基づいており、wxWidgetsは独自のwxWindowsライセンス(wxWidgets Licenceに名前を変更)にあり、FLTKは例外を除いてLGPLに基づいています。参考資料、チュートリアル、本については、それぞれのWebサイトを参照してください。


9
MFCは悪です。他に選択の余地がない場合は、WIN APIを使用したいと思います。
the_drow 2009


18

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

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

ただし、多くの新しい概念、データ型、名前空間、クラスが一度に導入されるため、これらも少し複雑すぎます。このため、一部のGUI WYSIWYGエディターにバンドルされています。彼らはほとんどGUIを備えたプログラミングソフトウェアを可能にします。

まとめると、MicrosoftのVisual Studioなど、GUI開発用の非フリーの「環境」もあります。Delphi経験のある人にとっては、Visual Studioの方が使い慣れている可能性があります。Microsoftから提供されている完全なVisual Studio環境の無料の代替手段であるVisual Studio Expressもあります。これは、GUI開発を始めるのに十分です。


15

「簡単な」チュートリアルを含むウェブサイトを見つけました:http : //www.winprog.org/tutorial/start.html


8
これにより、Win32 APIが導入されます。これは、Windowsプラットフォームに結び付けるGUIプログラミングへの非常に低レベルのアプローチです。それはお勧めしません。
VOG

17
これは有効なオプションです。開始するのに最適な場所ではないかもしれませんが、反対票を投じる価値はありません。
Emil H

1
これが理想的な解決策ではないことは知っていますが、WindowsのGUIシステムがどのように機能するかを学ぶのに役立ちます。私は数年前にこのチュートリアルを読みましたが、今ではメッセージループとは何か、それがどのように機能するかを知っています。.netでwinformを使用する場合、この知識が役立つ場合があります。
ZippyV 2009

7
デスクトップアプリケーションを作成する場合、OSが実際にどのようにレンダリングし、ユーザーと対話するかを知ることに勝るものはありません。基本を理解せずにライブラリを使用するだけでは、何が起こっているのか本当に理解できません。低レベルのwin32 GUIプログラミングを少し学ぶことは、十分に時間を費やすことになります。
テキサス州

@ジムインテキサス:同意しますが、この「低レベルのビット」は基礎のに学習する必要があるため、初心者には推奨が不適切であることがわかります。
VOG

3

C ++で.NET Windows GUIを作成するのは簡単です。

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

もちろん、自分は.NETに結び付けられますが、遊んでいるだけの場合、またはWindowsアプリケーションだけが必要な場合は問題ありません(ほとんどの人は今のところWindowsをまだ持っています)。


3

Qtは無料ではないため、FLTKを使用しています。wxWidgetsは選択しません。単純なHello、World! プログラムは、24 MB、FLTK 0.8 MBの実行可能ファイルを生成しました...


4
QTライセンスの変更により、QTに切り替える予定です
パーネッカー2013年

2
私自身のwxWidgetsプログラムは、リンクされたすべてのライブラリが内部にあっても 5.9 Mbです
msangel 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.