5

Qt は初めてですが、C++ についてはよく理解しています。GUI と .ui ファイルを生成し、VS 2012 でコーディングを行うための qt design (QT5) を学習しました。

現在、qt 設計なしで純粋に手書きで書かれた古いプロジェクトがあります。それを維持するには、コードを手動で記述する必要があります。

コードをリバース エンジニアリングして、qt デザインが機能するものを生成できる qt ツールはありますか? Qtデザインで将来のGUIの変更を行うことができますか?

どうもありがとう

4

3 に答える 3

5

適切に準備されたプロジェクトは、UI レイヤーからアプリケーション ロジックを分離し、UI レイヤーの変更や完全な置き換えを容易にします。変換したいプロジェクトがそのようなものであれば、ある程度実行できるはずです。

同じ命名を維持する場合、命令型 UI と生成された UI の最も大きな違いは、UI メンバーにアクセスするとき.uiの余分な部分です。ui->

すべての作業を行うツールはありませんがQObject::dumpObjectTree()、UI のツリーのような表現を取得するために使用できます。たとえば、次のようになります。

QTabDialog::dialog <574,451,133,123>
      QBoxLayout::unnamed
        QBoxLayout::unnamed
        QBoxLayout::unnamed
      QPushButton::ok <45,91,82,26>
      QTabWidget::tab widget <6,6,119,75>
        QTabBar::tab control <0,0,48,24>
          QToolButton::qt_right_btn I
          QToolButton::qt_left_btn I
          QAccel::tab accelerators
        QWidget::tab base I
        QWidgetStack::tab pages <0,22,119,51>
          QFrame::first <2,2,115,47>
          QObject::unnamed
          QWidgetStackPrivate::Invisible::unnamed <2,2,115,47>

ご覧のように、それを簡単に解析して、現在 UI にある各オブジェクトのタイプと名前を取得できます。その情報とメタ システムが提供する機能を使用して、プロパティをクエリし、XML .ui ファイルを生成できます。

もちろん、要素が動的に作成または削除される、より動的な UI を使用することもできますが、その場合、これを行うのは難しくなります。その場合、すべてを手動で行う必要があります。

于 2013-04-14T21:14:29.700 に答える
2

簡単な答え: いいえ。

まあ、あるかもしれませんが、少なくとも私は、C++ GUI を取り、そこから .ui ファイルを生成できるツールを知りません。そのようなものが存在する場合、C++ コードを解析しない可能性が高く、代わりに実行中のアプリケーションに何らかの方法で接続する必要があり、そこから GUI を解析します。Qt メタ オブジェクトとリフレクションを可能にするプロパティ システムのおかげで、私が見る限り、これを実際に実装するのはそれほど難しくありませんが、私はそのようなツールを知りません。これを行う GUI テスト ツールがありますが、実行中のアプリケーションから収集したデータから .ui ファイルを生成しません。

ただし、Qt GUI を手動で作成することは完全に合理的であり、多くの場合、メンテナンスも容易です (メンテナーが Qt スタイルの C++ および QWidgets に堪能である限り)。

また、新しいウィジェットを GUI に追加する必要がある場合 (または、既存のウィジェットを大幅に変更してゼロから書き直す必要がある場合)、これらのウィジェットを Qt Designer (スタンドアロン バージョンまたは Qt Designer に統合されたバージョン) で実装しても問題ありません。 Qt Creator IDE であり、Qt Creator で同じアイコンの背後にある場合でも、QML Designer と混合しないでください)。私の意見と経験では、個々のウィジェット (QTabWidget のページやダイアログなど) を Designer で設計する方が一般的には優れていますが、UI 全体を 1 つの大きな .ui ファイルとして設計することはできません。

于 2013-04-14T21:14:51.857 に答える