手書きのGUIとQt DesignerのGUIの比較[終了]


115

私はこれらの休暇をQtアプリケーションの作成を学ぶために費やしています。ほんの数時間前にQt Designerについて読んでいたので、疑問に思いました。Qtで実際のアプリケーションを書いている人は、GUIを設計するために何を使用していますか?実際、GUIは一般的にどのように設計されていますか?

たとえば、複雑なGUIの場合はデザイナーが理にかなっているかもしれませんが、Qtデザイナーを使用するよりも、手作業でコードを書く方が概念的に単純であることがわかりました。大規模なGUIはDesignerを使用して可能になるかもしれませんが、時間の経過とともに複雑さが増すにつれて管理が非常に難しくなる可能性があります(これは私の意見です)。AmaroKのソースコードをダウンロードして、彼らがやっていたことをのぞいてみたところ、addWidget()や友人への多くの呼び出しが見つかりましたが、Designerによって作成されたXMLファイルはありませんでした(脇:AmaroKは私のお気に入りのアプリケーションである必要があります)任意のプラットフォーム)。

では、GUIを作成する「正しい」方法は何でしょうか。デザイナーかコードか?このディスカッションでは、次のタイプのGUIについて考えてみましょう。

  1. 入力を取り、結果を表示して終了するだけの簡単なダイアログ。YouTubeのURLを受け取り、ビデオをユーザーのハードディスクにダウンロードするアプリケーションを想定してみましょう。初心者が最初に使用する可能性が高い種類のアプリケーション。
  2. 中級レベルのGUI、たとえば、いくつかのツールバー/メニュー項目を備えた付箋エディタ。たとえば、xPadを見てみましょう(http://getxpad.com/)。ほとんどのアプリケーションは「ユーティリティ」のカテゴリに分類されます。
  3. AmaroKやOpenOfficeなどの非常に複雑なGUI。あなたは彼らがあなたの目を出血させるので、あなたがそれらを見るとき、それらを知っています。

回答:


44

私たちのデザイナーとの経験はQt3から始まりました。

Qt3

その時点で、Designerは主に、アプリケーションにコンパイルするコードを生成するのに役立ちました。その目的で使用を開始しましたが、生成されたすべてのコードでは、一度編集すると、編集内容を失わずに戻って再生成することはできなくなります。最終的には、生成されたコードを取り、すべてを手作業で行うことになりました。

Qt4

Qt4はDesignerで大幅に改善されました。コードを生成するだけでなく、デザイナーファイル(xml内)を動的にロードして、プログラム内の実行中のオブジェクトに動的に接続できます -生成されたコードはありませんが、デザイナーでアイテムに名前を付けて固定する必要がありますコードを壊さないように名前を付けてください。

私の評価では、Mac OS XのInterface Builderほど便利ではありませんが、この時点で、プログラムで直接Designerファイルを使用することがわかりました。

Qt3以降、Designerに戻っていませんが、プロトタイプの作成やレイアウトのデバッグに使用しています。

あなたの問題について:

  1. おそらく、Qtが提供する標準のダイアログを使用することで問題を回避できるでしょう。 QInputDialog、またはQDialogをサブクラス化する場合は、必ずQButtonDialogBox を使用して、ボタンに適切なプラットフォームレイアウトがあることを確認してください。

  2. おそらく、Designerの機能が制限されたxPadのようなもっと制限されたものを実行できます。

  3. DesignerだけでOpenOfficeのようなものを書くことはできないと思いますが、それがポイントではないかもしれません。

テキストエディターと同じように、別のツールとしてデザイナーを使用します。制限を見つけたら、その新しい問題に対して別のツールを試してください。デザイナーではない人がレイアウトを作成できることはデザイナーの利点の1つであるという点で、Steve Sと完全に同意します。


23
uic(.uiファイルコンパイラ)によって生成されたコードを変更する必要はありません。さらに機能が必要な場合は、生成されたクラスから継承するか、それをメンバーとして含めて、必要なコードを追加する新しいクラスを作成しました。
パーカーコーツ

1
Qt3と初期のQt4(2008年頃)では、Qt Designerには、ButtonGroups、カスタムスロット、QLayoutsの名前付けなどのサポートの欠如など、一部の人にとっては魅力的な機能がいくつか欠けていたことに注目する必要があります。 6年かそこらで、これらの問題はすべて対処されました。可能な場合はUIファイルを使用することをお勧めします。レイアウトを再編成する方がはるかに簡単で、維持するコードが大幅に少なくなります。
ブレンダンアベル

42

Qt Designerおよびその他のツールキット/ UIツールの私の経験では:

  • UIツールは作業をスピードアップします。
  • UIツールを使用すると、後でレイアウトを簡単に調整できます。
  • UIツールを使用すると、プログラマー以外のユーザーがUIの設計に取り掛かることが容易になります。

複雑さは、多くの場合、UIツールでデザインを複数のUIファイルに分割することで対処できます。各ファイルにコンポーネントの小さな論理グループを含め、各グループを完全なUIの構築に使用される単一のウィジェットとして扱います。Qt Designerのプロモートウィジェットの概念は、これに役立ちます。

プロジェクトの規模によって違いが生じることはわかりません。あなたの経験は異なる場合があります。

UIツールで作成したファイル(本当に必要な場合は手動で作成できると思います)は、実行時に動的に読み込まれることがよくあります(QtとGTK +の両方がこの機能を提供します)。つまり、レイアウトを変更し、再コンパイルせずにテストできます。

最終的には、生のコードとUIツールの両方が効果的だと思います。それはおそらく環境、ツールキット/ UIツール、そしてもちろん個人的な好みに大きく依存します。UIツールが気に入ったのは、高速で稼働し、後で簡単に変更できるためです。


8

私が働いている組織は、そのGUIアプリケーションを数年前にQtに移植しました。言及する価値のあるいくつかの側面があると思います:

  • 少なくともその時点では、Qt Designerでの作業は現実的な選択肢ではありませんでした。QtDesignerで実行できない機能が多すぎました。
  • 保存する必要がある規則と構造により、Qt Designerを使用できませんでした。
  • Designerを使用せずに作業を開始すると、それに戻るのはおそらく困難です。
  • ただし、最も重要な点は、プログラマーがGUI IDEを使用するのではなく、viまたはemacsを使用したプログラミングに非常に慣れていたことです。

私自身の経験。Qt3.3を使用して4年になりますが、ダイアログでの動的な動作はDesignerでは実現できませんでした。


8

Qt Designerを使用せずにQtで複雑なGUIを作成して保守したと言うだけです-Qt Designerが好きではないためではなく、そのように作業することに慣れなかったためです。

それは部分的にはスタイルの問題であり、どこから来たのかです。Qtを始めたとき、DreamweaverとFrontpageやその他の視覚的なHTMLツールの恐ろしい経験がありました。問題。

ビジュアルツール内に保持しようとするビジュアルコードIDEには危険がありますが、最終的にはコードも微調整する必要があります-よく理解されていない方法で。

たとえば、iPhoneの開発を学ぶと、「マジック」のビジュアルアイテム(「接続インスペクタ」の空の円から「インターフェイスビルダー」ウィンドウのオブジェクトにドラッグする...)を押すのがイライラすることに気づきました。私)プレーンな古いコードで理解する。

Qtで頑張ってください-それは素晴らしいツールキットですが、あなたはそれを使用します、そしてQt Creatorは素晴らしいIDEのように見えます。


7

たとえば、グラフィカルデザイナーを使用する理由の1つは、Win32にレイアウトマネージャーがないことでした。絶対的な位置決めのみが可能であり、それを手作業で行うだけでは不十分でした。

GUIアプリをDelphiからJavaに切り替えて(2002年に)、以来、デザイナーを使用することはありません。私はレイアウトマネージャーがもっと好きです。そうです、定型コードを取得しますが、UIデザイナでオブジェクトを移動するには、定型コードを変更するのと同じくらいの時間がかかる場合があります。さらに、遅いIDEで行き詰まっていました。これはJava / C#の場合に適用されますが、Qt(特にQt4)には適用されません。Qt3の場合、生成されたコードを編集する必要があるのはなぜでしょうか。他のファイルにコードを追加することはできませんでしたか?その理由は?

説明されているケースについて:1)少なくともライブラリを知っている場合は、手書きのGUIの方が記述が高速です。初心者で知らない場合は、使用するAPIを学ぶ必要がないので、時間を節約し、デザイナーとの学習を減らすことができます。ただし、「学習が少ない」ことが重要な要素であるため、どちらの場合でも、Hand Coded GUIと言います。

2)メニューバーはコードを書くのにかなり面倒です。また、アクセラレータなどの詳細についても検討してください。それでも、それはあなたが慣れているものに依存します。しばらくすると、デザイナーにポイントアンドクリックしてすべてのプロパティを修正するよりも、その定型文を入力する方が速い場合がありますが、タイプライターに本当に入力できる場合(Unixコマンドの入力よりも高速な管理者など)任意のGUIを使用)。

3)ケース2の答えをこれに拡張します。Win32プラットフォームの場合、Win32リソースを生成するデザイナを使用すると、ロード高速になる可能性があることに注意してください(それについてはわかりません)。

ただし、Qt Designerを使用する際の潜在的な問題について触れておきます。実際のケース:多数のオプションを含む複雑なJavaダイアログ(プログラマーのテキストエディターの[設定]ダイアログボックス)をロードするのに数秒(たとえば10)かかりました。正しい修正は、GUIを構築するために各プリファレンスセットに個別のメソッドを追加することにより、プログラマーがそれらを表示したいときにのみタブをロードすることでした(後で気付いた)。

すべてのタブとタブスイッチャーをデザイナーと一緒に設計すると、簡単にそれを行うことができますか?手動でコード化されたGUIにより柔軟性が向上する同様の例があると思います。このような大きなアプリでは、たとえ最適化の目的であっても、それが必要になる可能性があります。


5
レイアウトマネージャーは、GUIデザイナーと相互に排他的ではありません。実際、なんらかのレイアウトマネージャーの概念を利用しないGUIデザイナーは、最新のGUIアプリケーションの99%での作業に役に立たないよりも悪いです。
スティーブS

7

GUIを作成するためにデザイナーを使用する主な利点の1つは、他のプログラマーが複雑なコードを掘り下げる必要なしにフォームとウィジェットを簡単に変更または保守できることです。


5

奇妙なことに、コーディング環境はグラフィカル環境でオブジェクトを操作するよりも簡単です。それは非常に簡単です。
デザイナーはあなたの生活をより簡単にするために存在し、長期的にはコードをより保守しやすくします。デザイナーを見てUIがどのように見えるかを確認する方が、コードを読んでそれがどのように見えるかを想像する方が簡単です。
現在のQtでは、デザイナー内からほぼすべてを実行でき、実行できないことはほとんどなく、コンストラクターのコード行をほとんど使用せずに修正できます。たとえば、最も簡単な例として、信号スロット接続を追加します。デザイナーを使用すると、ダブルクリックするのと同じくらい簡単です。デザイナがなければ、信号の正しい署名を検索し、.hファイルを編集して、.cppファイルにコードを編集する必要があります。デザイナを使用すると、これらの詳細を超えて、本当に重要なこと、つまりアプリケーションの機能に集中できます。


3
ええ、それは私には驚きましたが、数年前にQtを1年以上使用していたときから、グラフィカルなデザインよりも手書きでui作業を高速に実行できることに気付きました。手書きのコード化されたuiに欠けているものの1つは、画面上で実行されるまでどのように見えるかを簡単に確認できないことです(これは、共同作業の重要な側面になる場合があります)。
Joonhwan、2012年

1
彼女と同じように、私はデザイナーを容認することはできません、手で書くことは私にとってはるかに強力で速いです、これはもともと私がドラッグアンドドロップをほとんど処理しなかった非常に遅いMacを使っていたためであり、数年後にそれが唯一の方法となりました私はデザインをすることができます:)約見ることができない、まあ一年後にそれを実行する必要はなかった、それはすべて私の脳の想像層にマッピングされました。
ColdSteel

4

最初にデザイナーに頼ってGUIウィジェットを開発します。他の投稿で述べたように、より高速です。また、フィードバックが「正しく見える」かどうか、ユーザーを混乱させないかどうかを即座に確認できます。他のツールキットよりもQtを選ぶ主な理由はデザイナーです。主にデザイナーを使用して、1回限りのダイアログを作成します。

そうは言っても、メインウィンドウと複雑なウィジェットはすべて手作業で作成しています。これはTrolltechが意図した方法だと思います。 QFormLayoutは、プログラムで入力ダイアログを簡単に作成するために提供するクラスです。

ちなみに、Qt 4のデザイナーは、Qt 3のようなIDEではありません。これは、.uiファイルを編集するためのエディターにすぎません。それが好き。新しいクロスプラットフォームIDEはQt Creatorと呼ばれます。


4

それは古い記事ですが、クレマティーン-Amarokから派生した音楽プレーヤー(私は思う)を見てみることをお勧めします。彼らはQt4を使用しており、私が見ることができるものから、プロジェクトのsrcフォルダーにuiフォルダーがあります。ではUIフォルダ一つは、彼らが.uiファイルのすべての種類を持っている想像のとおり。Clementineをコンパイルして起動すると、GUIがかなり複雑で非常に優れていることがわかります。


3

私にとっては、ウィジェット/ GUIにカプセル化されるロジックの量に依存します。単純なフォームの場合は、QtDesignerを使用します。

複雑なチェックや相互作用が含まれている場合は、プログラムする傾向があります。


MFCアプリには、非常によく似たいくつかのウィンドウダイアログがあります。最近、すべてのコントロールを1つのダイアログに配置し、アプリの現在のモードに基づいて特定のコントロールを非表示にして再配置することを試みました。Qtでは、プログラムでコントロールを簡単に作成できると言っていますか?私の場合はそれが簡単になるのではないかと思っていました。あなたの考えを聞いてみたいです。
ミッチ2015

ミッチ、はい、Qtではプログラムでコントロールを構築できます。非常に簡単です。また、Qtは動的レイアウトを使用します。これは、ダイアログが引き続き美しく、1つのチェックボックスを追加しても20を追加しても使用できることを意味します。
ジョージY.

2

誰かがGuiを作成する必要がある場合は、Qt Designerを使用しています。
重要なことは、(クラス設計で行うような)特定のタスク用の小さなウィジェットを作成し、それらをまとめて「親GUI」にすることです。

このようにして、ウィジェットは再利用性が高く、モジュール化された方法でGuisに使用できます。各ウィジェットが送信する信号と、それらが提供するスロットを指定するだけです。

さらに、ビルドプロセス中に生成される可能性がある.ui-Filesを作成しています。これまでは、これらのファイルを手動で編集する必要はありませんでした。


0


QtDesignerを使用して、UIのさまざまな部分をさまざまな.uiファイルに構築し、
それらをコードにまとめます(そして複雑化を加えます)。

Qt Designerで実行できないことはありますが、コードでしか実行できない
ため、Qt Designerはツールチェーンの一部(大部分)にすぎません。


ああ@MOnsDaRは言うとおりに
デイブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.