web-dev-qa-db-ja.com

ハンドコーディングされたGUIとQt Designer GUI

私はこれらの休日をQtアプリケーションの作成方法の学習に費やしています。私はほんの数時間前にQt Designerについて読んでいたので、Qtで現実世界のアプリケーションを書く人はGUIを設計するのに何を使うのだろうと思いました。実際、人々は一般的にGUIをどのように設計していますか?

私は、複雑なGUIの場合は理にかなっているかもしれませんが、手でコードを書くことはQt Designerを使用するよりも概念的に簡単であることがわかりました。 Designerを使用して大きなGUIを作成することもできますが、時間が経つにつれて、複雑さが増すにつれて管理が非常に難しくなる可能性があります(これは単なる意見です)。 AmaroKのソースコードもダウンロードして、彼らのやっていることを覗いてみて、addWidget()や友人への多くの呼び出しを見つけましたが、Designerによって作成されたXMLファイルはどれもありませんでした任意のプラットフォーム)。

では、GUIを作成する「正しい」方法は何でしょうか。デザイナーまたはコード?この議論のために、次のタイプのGUIを考えてみましょう。

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

Designerでの経験はQt3で始まりました。

Qt3

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

Qt4

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

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

Qt3からDesignerに戻ったわけではありませんが、それを使ってプロトタイプを作成し、レイアウトをデバッグします。

あなたの問題について:

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

  2. Designerの機能が制限されているxPadのような、より制限された何かを行うことができます。

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

テキストエディターと同じように、Designerを別のツールとして使用します。制限を見つけたら、その新しい問題に対して別のツールを試してください。デザイナーの利点の1つは、プログラマーではない他の人がレイアウトを実行できることです。

42
Michael Bishop

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

  • UIツールは作業を高速化します。
  • UIツールを使用すると、後でレイアウトを簡単に調整できます。
  • UIツールを使用すると、プログラマーでなくてもUIの設計を簡単に、または可能にできます。

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

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

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

最終的には、生のコードとUIツールの両方が効果的だと思います。おそらく環境、ツールキット/ UIツール、そしてもちろん個人的な好みに大きく依存します。 UIツールが好きなのは、すぐに起動して実行でき、後で簡単に変更できるからです。

41
Steve S

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

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

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

8
andreas buykx

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

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

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

たとえば、iPhoneの開発を学ぶと、「魔法」の視覚的なもの(「接続」インスペクタの空の円からInterface Builderウィンドウのオブジェクトにドラッグするなど)が簡単になり、イライラすることがわかりました(私)普通の古いコードで理解する。

Qtで幸運を祈ります-それは素晴らしいツールキットですが、どのツールを使用しても、Qt Creatorは素晴らしいIDEのように見えます。

8
Sam Dutton

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

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

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

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

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

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

デザイナーと一緒にすべてのタブとタブスイッチャーを設計する場合、それは簡単にできますか?手でコード化されたGUIがより柔軟性を提供する同様の例があるかもしれないと思います。そのような大きなアプリでは、最適化の目的だけであるとしても、それが必要になるでしょう。

7
Blaisorblade

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

7
Nejat

奇妙なのは、グラフィカル環境でオブジェクトを操作するよりもコードを書く方が簡単だということです。それは簡単です。
設計者はあなたの生活を楽にし、長期的にはコードのメンテナンス性を高めます。 UIがどのように見えるかをデザイナーで確認し、コードを読んで、それがどのように見えるかを想像しようとする方が簡単です。
[。たとえば、最も単純な例-信号スロット接続を追加します。デザイナーを使用すると、ダブルクリックするだけの簡単な操作です。設計者がいなければ、信号の正しい署名を検索し、.hファイルを編集してから、.cppファイルにコードを編集する必要があります。設計者は、これらの詳細を超えて、本当に重要なこと、つまりアプリケーションの機能に集中することができます。

5
shoosh

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

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

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

4
Mark Beckwith

それは古い投稿ですが、クレメンタイン-Amarokから派生した(私が思う)音楽プレーヤーを見てください。彼らはQt4を使用しており、プロジェクトのsrcフォルダーにiフォルダーがあります。 iフォルダーには、あらゆる種類の.uiファイルがあると予想される場合があります。 Clementineをコンパイルして起動すると、GUIがかなり複雑で非常に優れていることがわかります。

4
s5s

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

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

3
Ben

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

このように、ウィジェットは非常に再利用可能であり、モジュール方式でGuisに使用できます。各ウィジェットが送信する信号と、提供するスロットを指定するだけです。

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

2
MOnsDaR

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

Qt Designerでできないこと、コードでしかできないこと、
Qt Designerは、ツールチェーンの一部(素晴らしい)にすぎません。

0
dave