44

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

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

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

4

6 に答える 6

42

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

QtDesignerの使用

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

ハンドコーディング

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

その他

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

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

于 2012-02-09T17:03:30.427 に答える
21

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

Qtデザイナー

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

ハンドコーディング

  • 良い

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

    • Qtを初めて使用する場合は、低速です。
    • レイアウトと動作の分離を強制しません。

チップ

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

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

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

Qtをお楽しみください!仕事にJavaSwingを使用しているので、それが恋しいです。

于 2012-02-09T19:41:44.013 に答える
4

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

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

于 2010-11-06T18:18:47.207 に答える
1

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

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

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

于 2012-02-15T09:07:33.653 に答える
0

私の個人的な意見(ただ個人的な)、すべてのGUIベースの開発は私をあまりにも気を散らし、GUIオブジェクトを見ているとき、私の想像力または私の心は非常に悪くなります。 、画像のない本を読んでいたようなものです...コード以外に何も表示されない場合は、より速く終了するように見えます...

2つ目の理由は、c ++が大好きなので、ハンドコーディングの良い面は、冗長なものを書いていてもc++の練習を続けることです...テキストのみを使用するとコーディングスキルが向上します。確かに、nanoまたはvimを使用することはできますが、それはデバッグには遅すぎます。

ここでのハンドコーディング++投票

于 2020-08-12T01:05:08.450 に答える
-1

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

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

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

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

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

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

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

于 2012-02-08T19:55:17.660 に答える