25

現在、GUIに接続する必要のあるC ++バックエンドがありますが、これまでGUIを作成したことがないため、どこから始めればよいか混乱していました。

私はC++とJavaでコードを書くことに慣れているので、GUIをこれらの言語のいずれかで使用することをお勧めします。また、GUIは、WindowsおよびLinux(したがって、Mac)に対してOSにかなり依存しない必要があります。

これで、Javaを使用してそれを行う場合、それを行うためにいくつかのラッパーが必要になることを理解しました-しかし、C ++でGUIを書くのは苦痛だと聞いたこともあります(厳密には中古です)。

私はJavaでバックエンドコードを書き直したくありません(誰がしますか??)そして私は次のような入力を望んでいました:

  • どちらの言語も、他の言語と比較して重大な長所/短所を提供しますか?
  • ラッピングの問題はどれほど深刻で、Javaを使用した場合にどれだけの書き換えが発生するか。
  • 人々が関連すると思う、私が見るべき特定のリソースはありますか?

ありがとう、乾杯:)

4

11 に答える 11

34

Qtを見てください。

私の経験では、2つの異なる言語ランタイム間の通信は常に困難です。以下を構築するための重要なアプリケーションがある場合、多くの場合、課題が発生します。-

  • エラー処理。
  • メモリ管理。
  • マルチスレッドと同期のセマンティクス。

ラッパーによる間接参照のレベルを上げることは別として、GUIやバックエンドなどを介してデータ構造を渡す必要がある状況のように多くのことを考える必要があります。

:-JavaStringをGUIからバックエンドC++に渡すことを検討してください。基本的に、Javaオブジェクトから文字を抽出し、Stringそれらを保持するメモリをリークすることなく、C++開発者がそれらを利用できるようにする必要があります。これは基本的な問題の例です(文字が返されるエンコーディングのような他の側面もあります)。

于 2010-07-08T19:26:54.020 に答える
15

あなたはすでにC++とJavaを知っていて、これまでGUIを使用したことがないと言います。つまり、次のことを意味します。

  • JavaGUIまたはC++GUIのどちらを使用する場合でも、GUIフレームワークの処理方法を学ぶ必要があります。
  • Javaを選択した場合は、2つの言語間のインターフェース方法も学ぶ必要があります。

したがって、C ++にとどまると、学ぶべきことが1つ節約されます。ええと、何かを学ぶことは常に良い考えですが、同時に2つの新しい概念を学ぶことは悪い考えかもしれません。とにかく、学習の負担は少ないかもしれませんが、SWIGのようなツールを使ったとしても、実際の作業はたくさんあると思います。

GUIをJavaで作成するのか、C++で作成するのが簡単かを知りたい場合があります。選択したフレームワークによって異なります。Javaの場合、デフォルトのJavaディストリビューションの一部であるAWTとSwingがあり、次にEclipseで使用されるSWTがあります。C ++には多くのツールキットがあり、Qt、GTK、wxWidgetsが最も人気があり、3つすべてがすべての主要なプラットフォームをサポートしています。これらの「C++」GUIツールキットのほとんどにはJavaバインディングまたはJavaポートもあるため、Javaでも使用できます。

これまでのところ、Swing、Qt、および状況に役立たないその他のいくつかを使用しました(.NET上のBorland C ++ BuilderおよびWinFormsに付属しているUIのもの)。基本的に、概念はこれらすべてのフレームワークで同じであり、他のフレームワークよりも難しいまたは簡単なものはありませんでした。唯一の例外はJavaかもしれません。なぜなら、他のツールキットには習得が容易なLayoutManagerと同等のものがあるにもかかわらず、これらのLayoutManagerを機能させることができなかったからです。しかし、多分それは私だけです。

また、Java GUIは常に醜く、ホストシステムに適合しないと言われます。ええと、ほとんどのJava GUIは実際にはそうですが、私見はJavaのせいではなく、プログラミングの悪さのせいです。SwingアプリをOSのルックアンドフィールに適合させるには2行のコードが必要であり、ほとんどのプログラマーは、JavaGUIにこれらの2行をコピーして貼り付けるのに十分な労力を費やしていません。彼らは残りのGUIデザインを気にします。

現在の状況では、C ++ GUIをお勧めしますが、将来の計画がどのようになるかを知っていて、残りの人生でJava GUIを実行することがわかっている場合は、今すぐ開始して、の余分な努力。

また、GUIにC ++を選択した場合、人々はあなたをあらゆる方向に引っ張るためにあらゆる種類のことを教えてくれます。3つの大きなポータブルフレームワークにはすべて長所と短所がありますが、その中に最高または最悪のフレームワークは1つもないと思います。Qtをすでに使用しているという理由だけでお勧めしますが、代わりにGTKまたはwxWidgetsを使用した場合は、おそらくそれをお勧めします。

于 2010-07-08T21:59:45.067 に答える
9

必要に応じて、既存のフロントエンドコードがない場合は、単純なWebインターフェイスが最も単純な場合があります。アプリケーションに小さなWebサーバーを埋め込み、「 http:// localhost:12345」(または最終的に使用するポート)でブラウザーを開きます。

于 2010-07-08T20:55:56.717 に答える
4

JavaとC++の結合についてはあまり言えませんが、Qtをご覧になることをお勧めします。これは、ファイルやネットワークアクセスなど、さまざまな目的のためのC ++ライブラリですが、GUI開発で最も有名です。また、ドラッグアンドドロップでGUIを構築できる優れたIDEもあります。また、QtはGUIライブラリの場合と同じようにOSに依存しません。

于 2010-07-08T19:31:18.183 に答える
2

C ++でGUIを作成することは、Javaで作成することほど面倒ではありません。

多数のクロスプラットフォームGUIライブラリがあります。GTK、gtk--、FoX、WXなど。Qtは実際にはC ++ではないためお勧めしません(コンパイル前に特別なプリプロセッサを必要とする言語の拡張バージョンを使用します)。加えて、あなたがあなたの製品を配りたくないならば、それは大金を要します。

ところで、それは「したがって」という言葉が使われている方法ではありません。

于 2010-07-08T19:31:48.963 に答える
1

フロントエンドとバックエンドの間の相互作用の豊富さについては言及していませんでした。これは、決定における既存の言語の重要性に重きを置くことになります。

私はQt、Swing、SWTを使用しており、通常、これらすべてのツールキットでC++とJavaの両方のコードを使用していました。言語間の相互作用は、追加のコスト/リスクを追加する可能性があります。ただし、他の利点を考慮すると、そのコストが正当化される場合があります。

何らかの理由でJavaフロントエンドを選択する場合は、JNASWIGを参照してください。

于 2010-07-08T23:00:18.407 に答える
1

ここで正直に言いましょう。ポータブルGUIに関しては、C++は地図に載っていません。

Javaには、一貫性があり、移植性があり、広く使用され、完全に文書化された、成熟したGUIツールキットがあります。C ++には、ほとんど機能しない中途半端なOSSライブラリがたくさんあり、真に移植性のあるものはありません。さらに、主張するすべてのターゲットで機能せず、残りのターゲットでむらがあり、制御を反転する高価な商用ライブラリがいくつかあります。彼らの奇妙なフレームワークで立ち往生。

他の理由(多くあります)でC ++が必要な場合を除いて、GUIにはJavaを選択してください。クロスオーバーコーディングは、両方の言語を知っている人にとっては簡単ですが、管理が面倒になる可能性があるため、ネイティブインターフェイスを可能な限り最小限に抑える必要があります。ここでの私のアドバイスは、インターフェイス全体でポインタ(または参照)を保持しようとしないようにチームと協定を結ぶことです。そうすると面倒になり、線が絡まったときにデバッガーがあなたを救うことはできません。代わりに、整数キーまたは文字列キーを使用して、ネイティブインターフェイスに渡します。

于 2010-07-08T23:05:14.983 に答える
1

日食はどうですか?見栄えがよく、すべてのプラットフォームで良好に機能します。私の推測では、日食のほとんどはJavaです。

于 2012-06-28T07:24:22.157 に答える
0

WINAPIやX11のようなネイティブC++GUIを学ばないのはなぜですか?次に、C ++でGUIを開発したことがないため、コンソールソフトウェアをwinehq、cygwin、その他のオープンソース互換性またはエミュレートされたソフトウェアなどの互換性のあるものにすることができます。Javaはより多くのRAMを使用するため、Javaを使用しないでください。もちろん、RAMがたくさんない限り。たとえば、Eclipse(Javaでコーディングされている)は、プロジェクトを開かずに実行すると500MBのRAMを使用できます。

于 2017-01-23T07:54:13.783 に答える
-1
  1. ラッピングは書き直しではなく、両方の言語を一致させるための単なるアダプターです。それは簡単です
  2. 言語に固定されていないように思われるので、.NET Gui(C ++ CLRを使用)を選択します。マシンに依存しないGUIがあり、既存のコードと簡単に通信できます。

初心者の場合、WinFormsの方が簡単かもしれませんが、WPFを使用してみてください。これは、.NETの世界でGUI開発を行うための最新のバリアントです。

個人的には、GUIにC#/。NETを使用し、C++CLRラッパーDLLを使用します。しかし、それが唯一の解決策ではありません。

Linuxでは、.NETの最適な実装はMONOです。私が開発したすべてのWinFormsアプリ(最もクレイジーなアプリではありません)については、変更なしで実行されました。C ++ / Qtでは、ターゲットOSごとに再コンパイルする必要があります。

于 2010-07-08T19:32:05.093 に答える
-1

プラットフォームに依存しないことが必須でない限り、GUIの作成にJavaを使用しないでください。ユーザーエクスペリエンスは遅くなり、C++との相互運用性は苦痛になります。

C ++でネイティブGUIを作成するには、BoostやQTなどのライブラリと一緒にGTKmmを使用できます。さらに、これらのライブラリはほとんどのプラットフォーム(GNU / Linux、Windows、OS X)で利用できるため、アプリケーションはどこでも再コンパイルできます。

編集:GLADEを使用してGUIをすばやく作成し、信号スロットにGTKmmのC++コードを入力します。

于 2010-07-08T20:20:20.510 に答える