[解決済み] ハンドコーディングGUIとQtデザイナーのGUIの比較 [終了しました。]
質問
この連休を利用して、Qtアプリケーションの書き方を勉強しています。数時間前にQt Designerについて読んでいて、「Qtで実際のアプリケーションを書いている人たちは、GUIをデザインするのに何を使っているのだろう? 実際、人々は一般的にどのようにGUIをデザインしているのでしょうか?
私自身は、Qt Designer を使用するより、コードを手で書くほうが概念的にシンプルだと感じました。大規模な GUI は Designer を使用して可能かもしれませんが、時間とともに複雑さが増し、管理が非常に困難になるかもしれません (これはあくまでも私の意見です)。また、AmaroK のソースコードをダウンロードして、彼らが何をしているかを覗いてみましたが、addWidget() などの呼び出しはたくさんありましたが、Designer で作成した XML ファイルはありませんでした (余談ですが、AmaroK はあらゆるプラットフォームで私のお気に入りのアプリケーションになっています)。
では、GUI を作成するための正しい方法は何でしょうか? デザイナーかコードか? この議論では、次のようなタイプの GUI を考えてみましょう。
- 入力を受け取り、何らかの結果を表示して終了するだけのシンプルなダイアログ。YouTube の URL を受け取り、ユーザーのハード ディスクにビデオをダウンロードするアプリケーションを想定してみましょう。初心者はこのようなアプリケーションから始めることが多いでしょう。
- 中級レベルの GUI。たとえば、いくつかのツールバー/メニュー項目を持つ付箋紙エディターのようなものです。xPad を例にとってみましょう ( http://getxpad.com/ ). ほとんどのアプリケーションはユーティリティのカテゴリに属すると思います。
- AmaroK や OpenOffice のような、非常に複雑な GUI。目を血走らせるようなものなので、見ればわかります。
どのように解決するのですか?
私たちのDesignerの経験は、Qt3から始まりました。
Qt3
その時点では、Designer は主にアプリケーションにコンパイルするコードを生成するのに便利でした。その目的で使用し始めましたが、すべての生成されたコードでは、一度編集すると、編集を失うことなく戻って再生成することができなくなります。結局、生成されたコードを使用して、以後はすべて手作業で行っています。
Qt4
Qt4ではDesignerが大幅に改良されました。もはやコードを生成するだけでなく、Designer のファイル (xml) を動的にロードして を実行中のオブジェクトに動的に接続することができます。 -- しかし、Designer でアイテムに名前を付け、コードを壊さないようにその名前に固執する必要があります。
私の評価では、Mac OS X の Interface Builder ほど便利ではありませんが、現時点では、プログラムの中で直接 Designer ファイルを使用することができます。
Qt3 以降は Designer に戻っていませんが、プロトタイプやレイアウトのデバッグのためにまだ使用しています。
あなたの問題のために。
-
Qt が提供する標準的なダイアログを使用することで、おそらく回避することができます。 QInputDialog を使うか、QDialogのサブクラスを作るなら、必ず QButtonDialogBox を使用して、ボタンが適切なプラットフォームレイアウトであることを確認してください。
-
xPad のような限定された Designer 機能で、より限定的なことができるかもしれません。
-
Designer だけで OpenOffice のようなものを書けるとは思いませんが、たぶんそれは問題ではないでしょう。
私は Designer をテキストエディタのような別のツールとして使用します。制限を見つけたら、その新しい問題に対して別のツールを試してみてください。Designer の利点の 1 つは、プログラマーではない他の人がレイアウトを行うことができるという点で、Steve S に完全に同意します。
関連
-
[解決済み】 unsigned int vs. size_t
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み] 他のスレッドからGUIを更新するにはどうすればよいですか?
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
-
[解決済み】LinuxのネイティブGUI APIは何ですか?
-
[解決済み】Qt-Designerでレイアウトが自動拡張される。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】変数やフィールドがvoid宣言されている