116

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

私は、コードを手動で記述することは、Qt Designer を使用するよりも概念的に簡単であることを発見しましたが、複雑な GUI では Designer が理にかなっているかもしれません。Designer を使用して大きな GUI を作成できる可能性がありますが、時間の経過とともに複雑さが増し、管理が非常に難しくなる可能性があります (これは私の意見です)。私は AmaroK のソース コードをダウンロードして、彼らが何をしているかを調べてみたところ、addWidget() やその仲間への呼び出しが多数見つかりましたが、Designer によって作成された XML ファイルはありませんでした (余談: AmaroK は、私のお気に入りのアプリケーションである必要があります)。任意のプラットフォーム)。

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

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

12 に答える 12

44

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

Qt3

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

Qt4

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

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

Qt3 以降、Designer に戻ることはありませんが、プロトタイプの作成やレイアウトのデバッグには引き続き Designer を使用しています。

あなたの問題のために:

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

  2. xPad のように、Designer 機能が制限された、より制限された機能を実行できる可能性があります。

  3. OpenOffice のようなものを Designer だけで書けるとは思いませんが、それは問題ではないかもしれません。

テキスト エディターと同様に、Designer を別のツールとして使用します。制限が見つかったら、その新しい問題に対して別のツールを試してください。Designer の利点の 1 つは、プログラマー以外の誰かがレイアウトを作成できることであるという Steve S の意見に完全に同意します。

于 2008-12-24T04:40:34.917 に答える
43

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

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

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

プロジェクトの規模が違いを生むとは思いませんでした。あなたの経験は異なる場合があります。

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

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

于 2008-12-22T19:39:24.183 に答える
8

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

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

私自身の経験です。Qt3.3を使って4年、ダイアログでの動的な挙動がDesignerでは実現できなかったことです。

于 2008-12-22T20:22:32.333 に答える
8

Qt Designer を使用せずに Qt で複雑な GUI を作成および管理してきたとだけ言っておきましょう。これは、Qt Designer が好きではないからではなく、そのような方法で作業することができなかったからです。

部分的にはスタイルと出身地の問題です。私が Qt を使い始めたとき、Dreamweaver や Frontpage、その他のビジュアル HTML ツールでひどい経験をしました。問題。

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

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

Qt で頑張ってください。これは優れたツールキットですが、どのように使用しても、Qt Creator は優れた IDE のように見えます。

于 2009-01-05T11:32:26.847 に答える
7

たとえば、グラフィカルデザイナを使用する理由の1つは、Win32にレイアウトマネージャがないことでした。絶対的なポジショニングだけが可能でした、そしてそれを手ですることはただひどいことでした。

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

議論されたケースについて:1)少なくともライブラリを知っている場合は、手書きのGUIの方が記述が速い可能性があります。初心者で、それらを知らない場合は、使用するAPIを学習する必要がないため、時間を節約し、デザイナーとの学習を減らすことができます。ただし、「学習量を減らす」ことが重要な要素であるため、どちらの場合も、ハンドコード化されたGUIと言えます。

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

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

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

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

于 2009-01-16T05:01:27.807 に答える
5

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

于 2008-12-22T19:58:37.623 に答える
4

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

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

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

于 2008-12-23T01:09:35.593 に答える
2

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

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

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

于 2010-10-19T06:02:59.037 に答える