クローズ。この質問は
意見ベースです。現在、回答を受け付けていません。
コメント
"。スマートポインタがそれを明示的にするという事実は、'言語が失敗することではありません。また、'そのようなことを考えていない場合は、私も見た高水準言語でゴミを生成することになります。'。
回答
これをばかげた回答にするつもりはありませんが、これが理由です。個人的にQtを使用しないでください。APIはほとんどの場合機能し、プラットフォームをシームレスにブリッジするという点で、良いことがたくさんあります。ただし、Qtは使用しません。理由は次のとおりです。
- 場合によっては、ネイティブプログラムのように見えないことがあります。さまざまな視覚的なスタイル上の理由から、すべてのプラットフォーム用に単一のUIを設計することは、マシン間を移動するときに本質的に正しく見えません。たとえば、Macマシンでは、分割バーは通常比較的太く、ボタンは小さく、アイコンで丸みを帯びています。 Windowsマシンでは、通常、分割バーは狭く、ボタンはよりテキストで、より正方形のデザインになっています。プラットフォームごとに1つのUIを記述できるからといって、ほとんどのアプリケーションに必要なわけではありません。
- Qtはリンク可能なC ++ライブラリのセットだけではありません。使用されているビルドシステムでは、特定のファイルを追加のソースファイルに変換する必要があるため、他のほとんどのライブラリと比較すると、ビルドプロセスがはるかに複雑になります。
- (2)の結果、C ++ IDEとツールQtの詳細を理解していないため、Qt式にエラーのフラグを立てることができます。これにより、QtCreatorまたは
vim
のようなテキストのみのエディターの使用がほぼ強制されます。
- Qtは大量のソースであり、コンパイルする前に使用するすべてのマシンに存在し、プレインストールする必要があります。これにより、ビルド環境のセットアップがはるかに面倒になる可能性があります。
- パーツはほとんどLGPLでライセンスされているため、より制限の厳しいライセンスまたはより制限の少ないライセンスでリリースする必要がある場合、シングルバイナリ展開を使用することは困難です。
- 同様に記述された" plain ol “ネイティブアプリケーション"(もちろんアプリケーションの書き込みを除くKDEの場合は10)。
コメント
回答
人々が言うように、各ツールはそれぞれの問題や状況に適合します…
しかし、あなたが「C ++プログラマーなら、Qtはあなたのフレームワークです。ライバルはありません。
私たちは複雑な医用画像の商用アプリケーションを開発しており、Qtはそれを続けています。
私はそうは言いません。人々がそれについて言う「短所」は誤りですが、私は彼らが長い間Qtを試していないと感じています(新しいバージョンごとに継続的に改善されています…)そして、彼らがコメントするほとんどすべての問題注意すれば問題ありません。
UIプラットフォームの不整合:カスタマイズやカスタムアートを使用せずに、UIウィジェットを「そのまま」使用する場合のみ。
Qtプリプロセッサの過負荷:シグナルスロットメカニズムまたはQObject継承を悪用した場合にのみ、本当に必要がない場合。
ちなみに、私たちはまだC#.NETでアプリケーションを作成しており、長い間それをやっています。ですから、私には十分な視点があると思います。
前述したように、各状況に対応する各ツール
しかし、Qtは間違いなく一貫性のある便利なフレームワークです。
コメント
回答
Qtについて私が気に入らないすべてのことのうち、テンプレートでうまく機能しないという事実は、私を最も悩ませます。これを行うことはできません:
template < typename T > struct templated_widget : QWidget { Q_OBJECT; public signals: void something_happened(T); };
プリプロセッサでもうまく機能しません。これを行うことはできません:
#define CREATE_WIDGET(name,type) \ struct name ## _widget : QWidget \ { \ Q_OBJECT; \ \ public signals: \ void something_happened(type); \ }
これは、信号に応答するすべてのものがQ_OBJECTでなければならないという事実と相まって、Qtの動作を困難にします。 C ++プログラマーのために。JavaまたはPythonスタイルのプログラミングに慣れている人々は、おそらく実際にはかなり良いでしょう。
私は実際に、型安全性を取り戻し、Qt信号を任意の関数オブジェクトに接続する方法の調査と考案に多くの時間と労力を費やしました: http://crazyeddiecpp.blogspot.com/2011/01/quest-for-sane-signals-in-qt-step-1.html
そこでやりたいのは、Qtmocによってほぼ不可能にされた基本的な日常のC ++開発です…それ自体が
率直に言って、自動化されたUIテストを実行したい場合、QtはMFCを除いて、町でほとんど唯一のゲームであるため、私はそれに固執しています。 ..これは1980年です(そのたわごとでの作業は非常に困難です)。WXと言う人もいるかもしれませんが、さらに深刻な問題が発生しています。 GTKmmは私の最初の選択でしたが、すべての所有者が作成し、アクセシビリティを実行しないため、業界標準のテストソフトウェアで駆動することはできません。Qtはその点で十分に難しいです(ほとんどアクセシビリティプラグインを変更すると機能します。
コメント
回答
Qtを使用しない理由の1つは、Windowsなどの1つのアーキテクチャのみを対象に作成する場合、C#/。NET(またはMacの場合はCocoa)を使用することをお勧めします。 OSの最新のベルとホイッスルを利用できるようになります。
クロスプラットフォームアプリを作成している場合は、Javaなどの別のテクノロジーにすでに深く関わっている可能性があります(つまり、「Javaショップ」で働いています)。テクノロジーの選択は、言語固有のAPIなど、開発しているエコシステムによって決定される場合があります。このような場合、テクノロジーの数を最小限に抑えることが有益な場合があります。
私が考えることができる3番目の理由は、QtがC ++に基づいており、C ++はプログラミングが比較的困難/危険な言語であるということです。 。私はそれが専門家のための言語だと思います。最高のパフォーマンスが必要で、細心の注意を払うことができる場合でも、C ++はおそらく町で最高のゲームです。実際、範囲外になるように設定すると、Qtはメモリ管理の問題の多くを改善します。また、Qt自体は、ユーザーを多くの厄介なC ++の問題から隔離するのに適しています。すべての言語とフレームワークには長所と短所があります。これは非常に複雑な問題であり、通常、ダイナーによく見られる追加の速度、品質、価格で要約できます(ただし、2つしか選択できません)。
ルールでは、維持する必要があるとされていますが質問への回答に焦点を当て、Qtを使用しない一般的な理由を要約したBillyONealによって提起された問題のいくつかに反論したいと思います。
-
Qtは確かにC ++ライブラリ/フレームワーク/ヘッダーファイルです。これは、とりわけ信号とスロットを有効にするマクロプロセッサ(moc)によって拡張されます。追加のマクロコマンド(Q_OBJECTなど)を変換して、クラスがイントロスペクションや、Objective-C機能をC ++に追加すると考える可能性のあるその他のあらゆる種類の機能を備えているようにします。この純度の欠如に腹を立てるほどC ++について十分に知っている場合、つまりあなたがプロの場合、1)Q_OBJECTとその同類を使用しないでください。または2)これを実行することに感謝し、これが問題を引き起こす非常に限られたコーナーケースを回避してプログラムしてください。スロット!」と言い換えると、ある「問題」を別の「問題」と交換していると思います。Boostは巨大であり、ドキュメントの質の悪さ、恐ろしいAPI、クロスプラットフォームの恐怖(gccのような古いコンパイラを考えてください)など、よく言われる問題があります。 3.3およびAIXのようなビッグアイアンコンパイラ)。
-
エディタのサポートについては、これも1から続きます。実際、QtCreatorはIMHOで最高のグラフィカルC ++エディタです。 、Qtのものを使用しなくても。多くのプロのプログラマーはemacsとvimを使用しています。また、Eclipseが追加の構文を処理すると思います。したがって、Qtマクロ(Q_OBJECT)またはシグナル/スロットの追加に問題はありません。これらのマクロはC ++への追加であるため、VisualStudioではおそらく見つかりません。しかし、概して、C#/。NETの人々は、独自の技術でカバーされた多くの機能を備えているため、とにかくQtを使用することはありません。
-
Qtソースのサイズについては、一晩でコンパイルする限り、誰が気にしますか?デュアルコアMacbookでQt4を「一晩未満」でコンパイルしました。これがあなたの決断の原動力ではないことを願っています。特定のテクノロジーを使用するかどうか。これが本当に問題になる場合は、Qt WebサイトからMac、Linux、およびWindows用にコンパイル済みのSDKをダウンロードできます。
-
ライセンスは1)Qt ITSELF を変更して共有したくない場合、またはQtを使用していてアトリビューションを提供したくないという事実を非表示にする場合の独自のライセンス(ブランディングにとって非常に重要な場合があります)と画像!)2)GPLと3)LGPL。はい、静的リンク(Qtのすべてをバイナリにロールする)に問題があります-しかし、内部を覗いて自分がいることに気付くことができないので、それ以上だと思いますu Qtを歌います(帰属!)。 Digiaからプロプライエタリライセンスを購入しようとしましたが、「あなたがしていることのために、あなたは本当にそれを必要としない」と言われました。うわー。ライセンスを販売するビジネスをしているビジネスから。
-
バイナリ/バンドルのサイズは、Qtを持っていない人に配布する必要があるためです。Windowsにはすでにありますか? Visual Studioのものを使用するか、ランタイムをインストールする必要があります。 Macにはすでに巨大なCocoaが付属しており、動的にリンクすることができます。私はあまり配布をしていませんが、最大50メガバイトの静的ファイル(UPXなどのバイナリストリッパー/圧縮ユーティリティのいくつかでさらに小さくすることができます)の配布に大きな問題は見つかりませんでした。これを行うには十分注意してください。ただし、帯域幅が問題になる場合は、ビルドスクリプトにUPXステップを追加します。
-
「ネイティブルックアンドフィール」の定義は何ですか? 「ほとんど」は、Macが統一されたルックアンドフィールに最も近いことに同意すると思います。しかし、ここに座って、Safari、iTunes、Aperture、Final Cut Pro、Pagesなどを見て、OSベンダーによって作成されているにもかかわらず、それらは何も似ていません。ウィジェットのスタイリング、応答性など、「感触」の側面の方が関連性が高いと思います。応答性が気になる場合は、Javaやその他の非常に動的な言語ではなくC ++を使用する理由がここにあります。 (Objective Cも揺らいでいますが、私はQtに関する神話を払拭しようとしています)
要約すると、これは複雑な問題です。しかし、神話や10年前の情報に基づいて考えるように、「Qtを使用しない」理由は少ないと思います。
コメント
回答
その一部はライセンスです。ライセンス履歴の一部については、 https://en.wikipedia.org/wiki/Qt_(software) #Licensing を参照してください。 2000年まで、オープンソースを強く気にかけていた人々はQtを使用していませんでした。限目。 (実際、これがGnomeの開発の元々の動機でした。)2005年まで、Windows用のフリーソフトウェアをリリースしたいと思っていた人々はQtを使用していませんでした。その日以降でも、GPL以外の何かの下でフリーソフトウェアを望んでいた人々は、単にQtを使用するオプションがありませんでした。したがって、それらの日付より古いフリーソフトウェアプロジェクトはQtを使用できませんでした。もちろん、プロプライエタリコードを作成する人は特権を支払う必要がありました。
さらに、それはあたかもあるかのようではありません。他のオプションの不足。たとえば、 WxWidgets 、 GTK + 、 Tk はすべてオープンソースのクロスプラットフォームツールキットです。
さらに長い間、Windowsはデスクトップで非常に支配的であったため、多くのソフトウェアは実行するだけのコンテンツでした。 Windows上。Microsoftツールチェーンをインストールする場合、他のことを心配するよりも、Microsoft独自のものを使用する方が簡単であり、多くのプログラマーがそれを実行しました。
コメント
回答
上記の理由のほぼすべてに同意しますが、ここにいる多くの人は、Qtに伴う余分なオーバーヘッドのために、Qtを使用しないと言っています。私は同意しません。これは、今日の最も一般的なすべての言語(Java、C#、Python)自体がかなりのオーバーヘッドを伴うためです。
次に、Qtを使用すると、C ++を使用したプログラミングが非常に簡単で簡単になり、追加のリソースを使用します。簡単に記述できるため、標準のC ++ではなくQtで記述されたコンソールアプリケーションを数多く目にしました。
Qtの生産性はC / C ++の生産性よりも優れていますが、Pythonなどの言語よりは劣っています。
コメント
回答
これは本当に炎上戦争を開始する試みではなく、いくつかの点に対処したかっただけです。
Qtが広く使用されていない本当の理由は、おそらくC ++であり、デスクトップアプリにc ++を使用する人が少ないことです。
QtはC ++ライブラリではありません。個別のコンパイル手順が必要なため、他のほとんどのライブラリと比較すると、ビルドプロセスがはるかに複雑になります。
vs-ビジュアルスタジオのアドインは、Qt独自のコマンドライン作成プロセスと同様にこれを自動的に実行します。 MFCのダイアログの作成に使用されるリソースコンパイラも別の手順ですが、それでもc ++です。
Qtは大量のソースであり、コンパイルする前に、使用するすべてのマシンに存在し、プリインストールされている必要があります。これにより、ビルド環境のセットアップがはるかに面倒になる可能性があります。
のバイナリダウンロードがあります。 VisualStudioの各バージョンとソースからのビルドは1つのコマンドです。最近のSDKソースサイズはそれほど重要ではないと思います。 Visual Studioは、選択して選択するのではなく、すべてのC ++ライブラリをインストールするようになりました。その結果、コンパイラのインストールサイズは> 1Gbです。
It ” sはLGPLでのみ利用可能であるため、より制限の厳しいライセンスまたはより制限の少ないライセンスでリリースする必要がある場合にシングルバイナリ展開を使用することは困難です。
LGPLはlibにのみ適用され、コードには影響しません。はい、それはあなたが単一のバイナリではなくDLLを出荷しなければならないことを意味します(あなたが支払わない限り)、しかしあなたがJavaランタイムまたは小さなユーティリティのための.Netアップデートをダウンロードする必要がある世界ではこれはそれほど大したことではありません。 「また、単一のABIを備えたプラットフォームでは、他のQtアプリがライブラリを共有できるため、問題は少なくなります。
場合によっては、問題が発生しません。」ネイティブプログラムのように見えます。さまざまな視覚的なスタイル上の理由から、すべてのプラットフォーム用に単一のUIを設計することは、マシン間を移動するときに本質的に正しく見えません。
想定されていますネイティブのウィジェットとテーマを使用するため。ユーザーがスタイルについてあまり気にしないように、私は主に技術的なアプリを使用していることを認めなければなりません。特にWindowsでは、すべてのスタイルをスマートフォンウィジェットとして使用するための新しい方法は、とにかく標準がますます少なくなっていることを意味します。
コメント
回答
理由は単純です。すべての主流言語に適切にバインドされているわけではなく、魔法のようではありません。 常に目前の仕事に適しています。
仕事に適したツールを使用してください。単純なコマンドラインアプリケーションを作成している場合、それだけのためにQtでそれを膨らませるのはなぜですか?
より一般的な答えとして(私はここに関連しているので、これを与えることができます) )、一部のプログラマーは、それを試してみて、それを使用することに決めたことはありません。場合によっては、プログラマーがその必要性を見つけて調べたことがないこと以外に特別な理由はありません。
コメント
回答
Qtのようなフレームワークは、製品の外観に関心がある場合に適していますべてのプラットフォームで製品が正しく見えるよりも、すべてのプラットフォームで同じです。最近では、こうした種類のアプリケーションがWebベースのテクノロジーに移行することが多くなっています。
回答
私自身の意見では、C ++プログラミングの学習は、複雑さを隠す他の言語に陥るよりも簡単であり、プログラマーは何を知りません。本当にバックグラウンドで発生します。一方、Qtは、C ++に比べていくつかの利点を追加して、ネイティブC ++よりも高いレベルにします。したがって、Qt C ++は、同じ方法で低レベルのタスクまたは高レベルのタスクを開発したい人にとって優れたフレームワークです。 C ++は(いくつかの慣習により)複雑で単純な言語です。それに挑戦したくない人にとっては複雑で、好きな人にとっては単純です。複雑さのために放置しないでください!
回答
Qtが優れたフレームワークであることに同意します。それでも、私が抱えている問題はたくさんあります。
- これはC ++で書かれており、これは非常に低レベルの言語です。それがC ++であるという事実だけでも、他の言語で書かれたフレームワークと比較して、すべてのQtプログラマーの生産性が大幅に低下します。 GUI開発言語としてC ++を使用する私の主な利点は、自動メモリ管理の概念がほとんどないことです。これにより、開発プロセスでエラーが発生しやすくなります。これは内省的ではないため、デバッグがはるかに困難になります。他の主要なGUIツールキットのほとんどには、自動メモリ管理とイントロスペクションの概念があります。
- すべてのクロスプラットフォームツールキットには、サポートされているすべてのプラットフォームの中で最小公分母しか実装できないという問題があります。それと、プラットフォームごとに異なるUIガイドラインは、クロスプラットフォームGUI全体の望ましさを非常に疑問視しています。
- Qtは、すべてのUIのコーディングに非常に重点を置いています。 QtDesignerを使用してUIの一部を構築することは できますが、たとえば(Cocoa / Obj-C)InterfaceBuilderや.Netツールと比較すると大幅に不足しています。
- Qtには多くの低レベルのアプリケーション機能が含まれていますが、特定のプラットフォーム用に手動で調整されたフレームワークを持つことと比較することはできません。 WindowsとOSXの両方のネイティブオペレーティングシステムライブラリは、Qtの実装よりもはるかに強力です(オーディオフレームワーク、低レベルのファイルシステムアクセスなどを考えてください)
とはいえ、私は使用するのが大好きです迅速なアプリケーションプロトタイピングまたは社内アプリケーション用のPyQt。Pythonを使用してすべてのコーディングを行うと、C ++に関する懸念が軽減され、実際にQtが非常に快適な場所になります。
いくつかのコメントに応えて編集:
QtがC ++で記述されていることについて書いたとき、Qt自体についてはそれほど不満はありませんでした。 、しかしそれが住んでいる環境についてもっと。Qtがそれ自身のリソースを非常にうまく管理しているのは事実ですが、GUI関連であるがQtではないコードもすべてC ++で書かれなければなりません。優れたツールですが、最終的には、そのレベルでC ++を処理する必要があります。QtはC ++を耐えられるものにしますが、それでもC ++です。
イントロスペクションに関して言えば、これは次のとおりです。デバッグが最も難しいケースは次のとおりです。あなたが思ったとおりに動作しないオブジェクトへのポインタがあります。 C ++を使用すると、デバッガーはそのオブジェクトの内部を少し調べることができる場合がありますが(thwtポイントに型情報がある場合)、それでも常に機能するとは限りません。一方、同じ状況でココアを取ります。 Cocoa / Obj-Cでは、デバッガー内のオブジェクトにメッセージ(「関数の呼び出し」)を送信できます。オブジェクトの状態を変更したり、属性を照会したり、タイプや関数名を尋ねたりすることができます。これにより、デバッグがはるかに便利になります。 Qt / C ++にはそれに近いものはありません。
コメント
回答
最も重要ですが、言及されていないこと。大きなプロジェクトでは、1つのことが非常に多くの問題と不要なコードを引き起こします。 Qtのシグナルスロットメカニズムは非効率的です。Qtウィジェットは、イベントの単純なウィジェットに必要なシグナルを提供しません。たとえば、onHover、onMouseEnter、onMouseLeave、onKeyReleased、onLostFocus、onGainFocusなどのシグナルを設定することはできません。 QTreeWidgetは、1つまたは2つの非常に単純な役に立たないシグナルを提供します。
はい、イベントを使用できますが、カスタムイベントを使用してウィジェットごとに新しいクラスを作成しました。これは非常に効率が低下します。
- カスタマイズされたウィジェットオブジェクトイベントを書き直しました。小さな変更があります。
- QtDesignerのものはすべて失われます。すべてのウィジェットをカスタムイベントで宣伝する必要があります。
- プロジェクトが大きくなり、維持が困難になりました。
- このため、qtが嫌いになりました。そして、.netがデリゲートを提供する方法、シグナルスロットよりもはるかに優れている方法、.netについて話し始めました。コンポーネント(ウィジェット)は通常、想像できるすべてのイベントを提供します。など
私の大学の1つシグナル以外のイベントを使用する必要があったため、コンボボックスウィジェットごとに新しいコンボボックスクラスを作成しました。実話…
ただし、Qtは、これまでのところ、浮き沈みのある最高のC ++ UIフレームワークです。
コメント
回答
Qtは本当に好きですが、「多くのアプリケーションにとっては少し重いです。そのレベルの複雑さを必要としない場合もあります。 Qtのオーバーヘッドがまったくなく、単純なものが必要な場合があります。すべてのアプリケーションがイベント駆動型である必要はなく、C ++は妥当なテンプレートのセットを提供します。 Boostは、もう1つの非常に優れたセットを提供し、QTが行う多くの低レベル機能(ファイル、ソケット、マネージポインターなど)を含みます。
他のアプリケーションには、GPLとうまく連携しないライセンス要件があります。 、LGPLまたはQtの商用ライセンス。 GPLは商用ソフトウェアには不適切です。 LGPLは静的にリンクされたソフトウェアには不適切であり、商用ライセンスにはお金がかかります。これは多くの人が支払うことを望まないものです。
Qtのような複雑なライブラリを許可しないセキュリティまたは安定性の考慮事項があるものもあります。
ソースを前処理するには、mocを実行する必要があります。これは大きな問題ではありませんが、新しいユーザーにとっては気が遠くなる可能性があります。多くのプログラマーは、Qtでqmakeを使用する必要があると 考えていますが、それは「誤解です。Qtを他のビルドシステムに非常に簡単にプラグインすることは可能です。
一部のターゲットは非常にメモリまたはCPUに制約があります。
プラットフォーム固有の落とし穴がいくつかあります。それらの落とし穴のほとんどは文書化されていません。十分に大きなアプリケーションを構築すると、それらに遭遇し、何が起こっているのか疑問に思います(免責事項、前回Qtを怒りで使用したのは18か月以上前だったので、改善された可能性があります。
C ++のみです。他の言語バインディングも存在しますが、多くのQtが必要な機能。
Qtを使用しない理由はたくさんあります。そのため、代替手段があります。ハンマーだけの場合、すべての問題は釘のように見えます。
コメント
回答
実際の理由は技術的ではありません。
人は起こります異なるように。彼らの選択もそうです。均一性は人間の特徴ではありません。
コメント