web-dev-qa-db-ja.com

QtDesignerとハンドコーディング

グラフィカルツールキットを使用してプロジェクトを開始するたびに、最初の競合の1つは、ビジュアルデザインとウィジェットレイアウトの処理方法の決定で発生します。グラフィカルツールまたはハンドコーディングですか。

ほとんどの人は個人的な好みに基づいて決定するため、これは非常にトリッキーで主観的な質問です。また、グラフィックツールの品質にも大きく依存します。この場合、QTライブラリの最新バージョンだけに焦点を当てたいと思います。どちらの方法が良いかを議論するつもりはありません。最善の答えは、プロジェクトによって異なります。

私が欲しいのは、いくつかのプロジェクトの後の経験に基づいた、偏見のない良い記事への参照です。この記事では、両方の選択肢のトレードオフについて説明する必要があります

38
SystematicFrank

私はすべてを手作業でコーディングすることから始めましたが、最近ではほとんどのフォームでQtDesignerの使用に切り替えています。各ポジションのメリットは次のとおりです。

Qt Designerを使用

  • 私にとって最大の時間節約は、複雑なレイアウトの管理です。面倒なコーディングをたくさん節約できます。ウィジェットを(非常に大まかに)配置し、選択して右クリックし、正しいタイプのレイアウトに配置するだけです。特にレイアウトがネストされると、これはsoはるかに簡単になります。
  • 実装ファイルをすべての定型レイアウトコードで埋めるのではなく、クリーンに保つ傾向があります。私はタイプAなので、それが好きです。
  • アプリケーションを翻訳している場合は、翻訳者に.uiファイルを送信して、翻訳するテキストがどこにあるかをGUIで表示できるようにすることができます。 (彼らがQt言語学者を使用していると仮定します。)

ハンドコーディング

  • コントロール。非常に特定の順序でコントロールをインスタンス化/初期化する必要があるレイアウトがある場合、または他の基準(データベースルックアップなど)に基づいてコントロールを動的に作成する必要がある場合、これが最も簡単な方法です。
  • カスタムウィジェットがある場合は、Designerを使用して、クラスの派生元に最も近い組み込みのQWidgetを追加し、それを「アップグレード」することができます。ただし、ウィジェットを別のプロジェクトのデザイナープラグインにしない限り、ウィジェットのプレビューは表示されません。これは、ほとんどのユースケースでは非常に手間がかかります。
  • オプションのQWidget親を超えてコンストラクターでパラメーターを受け取るカスタムウィジェットがある場合、Designerはそれを処理できません。そのコントロールを手動で追加する以外に選択肢はありません。

その他

  • 自動接続のSLOTSおよびSIGNALS機能を使用しない(「on_my_button_clicked」などの命名規則に基づく)。ほとんどの場合、この接続を設定する必要があることがわかりました。 Qtが私のためにそれをするときではなく、決まった時間に。
  • QWizardフォームの場合、ページごとに異なるUIファイルを使用する必要があることがわかりました。すべてを1つで行うことはできますが、あらゆる種類のカスタム方法でページ間を通信するのは非常に厄介になります。

要約すると、私はQt Designerから始めて、可能な限りそれを取得し、そこから手動でコーディングします。これは、Qt Designerが生成するものの良い点の1つです。これは、クラスのメンバーになる別のクラスであり、必要に応じてアクセスして操作できます。

37
Dave Mateer

私の答えは、PyQt4(Qt 4へのPythonバインディング)とOpenGLを使用して生化学アプリケーションを開発した2年間に基づいています。パフォーマンスが重要なアルゴリズムにのみC++を使用したため、C++ Qtは実行していません。とは言うものの、PyQt4 APIはQt4に非常に似ているため、ここでも多くのことが当てはまります。

Qt Designer

  • 良い
    • 探査。使用可能なウィジェット、それらのウィジェットの名前、それぞれに設定できるプロパティなどを確認してください。
    • UIロジックをアプリケーションロジックから分離します。
  • 悪い
    • 実行時にウィジェットを追加または削除する必要がある場合は、そのロジックをコードに含める必要があります。 UIロジックを2か所に配置するのは悪い考えだと思います。
    • ネストされたレイアウトに変更を加える。レイアウトにウィジェットが含まれていない場合、レイアウトは折りたたまれ、ウィジェットを目的の場所にドラッグアンドドロップするのは非常に難しい場合があります。

ハンドコーディング

  • 良い

    • Qtに精通している場合は高速です。
    • 実行時にウィジェットを追加または削除する必要がある場合に最適です。
    • 独自のカスタムウィジェットがある場合は、QtDesignerよりも簡単です。
    • 規律があれば、UIレイアウトを動作から分離することができます。コードを配置してウィジェットを作成およびレイアウトし、コードを配置して信号とスロットを別の場所に設定するだけです。
  • 悪い

    • Qtを初めて使用する場合は、速度が遅くなります。
    • しない強制レイアウトと動作の分離。

ヒント

  • ウィンドウの作成に飛び込むだけではいけません。紙に、またはBalsamiq Mockupsなどのツールを使用して、いくつかの可能なデザインをすばやくスケッチすることから始めます。 Qt Designerでこれを行うことはできますが、それが最良のデザインであるかどうかを判断する前に、ウィンドウを正しく表示するために多くの時間を費やすのはあまりにも魅力的だと思います。

  • Qt Designer for PyQtを使用する場合、pyuic4を実行して* .uiファイルをPythonソースファイルにコンパイルするという追加の手順があります。この手順を忘れて、頭を悩ませるのは簡単です。変更が機能しなかった理由。

  • UIを手動でコーディングする場合は、レイアウトコードをある場所に配置し、シグナルとスロットを別の場所に配置することをお勧めします。これを行うと、アプリケーションロジックに影響を与えることなく、ウィジェットをウィンドウに配置する方法を簡単に変更できます。または、すべてのレイアウトコードを調べなくても、動作を変更できます。

Qtをお楽しみください! Java Swing for workを使用しているので、それが恋しいです。

19

私はデザイナーを使用してダイアログをレイアウトする傾向がありますが、メインコードですべてのイベント処理を行います。また、すべてのメインウィンドウ、ツールバー、メニューを直接コードで実行します。

デザイナーはただイライラしています-まともなドラッグアンドドロップサイザーベースのデザイナーが10年以上前から存在しているので残念です

4
Martin Beckett

これは、アプリケーションに必要なさまざまなウィンドウ/パネルの数によって異なります。数が少ない場合は、グラフィカルツールを使用してください。いくつかのウィンドウを完全に設計する方がはるかに高速です。数が多い場合、グラフィカルツールはプロトタイプにのみ使用できます(使用する必要があります)。許容可能なコストでアプリケーション全体の変更を行えるように、レイアウトをコーディングする必要があります。

これには、アプリケーションのUIがどのように機能するかのモデルの作成、および実行時にウィジェットを動的に追加および削除することが含まれます。 (異なる環境での)そのようなモデルの優れた例については、オブジェクトブラウザを作成するための グラマーモデル を見てください。

私はそれがトリッキー/主観的であるという提案に反対します(少なくとも他の開発の選択肢よりも)。決定する基準を思い付くのは簡単です。個人的な経験と好みは、異なるウィンドウの数をいつ少なくするかを決定するため、そのために重要です。同じことが工具の品質にも当てはまります。

1

私は両方の組み合わせを使用します:

  1. X、y座標については、Designerが最適です。

  2. 他の多くのUIプロパティなどをコードで設定できます。

UIを完全に手作業でコーディングしようとすると、非常に時間のかかるプロジェクトになると思います。 HTMLテーブルを設定するほど簡単ではありません。

はい、バージョン4は悪いですが、バージョン3を使用したことのある職場の人々は、それは本当に悪いと言いました。たくさんのクラッシュ。

私は、仲間のQTerと一緒に、バージョン5が改善されることを心から望んでいます。

これは古い質問ですが、これがお役に立てば幸いです。一人の男の経験。

0
Wes