2017-07-26 9 views
-1

私は、次のような構造Ui_MainWindow Qt5デザイナーとカプセル化

  • VerticalLayout
    • QTabWidget
      • ウィジェット(* A

        • を持っているQtのDesginerでメインウィンドウを作成しました)
          • QChart
          • QChart

UICは、ヘッダファイル "ui_mainwindow.h" を生成します。このヘッダーファイルには、すべてのサブ(subsub、subsubsub、...)ウィジェットの参照が含まれています。私の視点では、これは良いカプセル化ではありません。

Qtデザイナーでさまざまなウィジェットのカスタムクラスを設定する方法が見つかりました。 これらのクラスを手動で記述する必要があるため、子ウィジェットへのアクセス/参照はありません。私はウィジェット自体を制御することしかできません。それでも、すべてのウィジェットはMainWindow UIで参照されます。

それぞれ(または選択した)ウィジェットに対して別々のクラスを生成する方法はありますか?私は* Aを傍受して子供QChartsにアクセスしたいと思います。

ありがとう、

+0

UIクラスの処理方法を変更できます。設定はCreatorの設定でC++ - > Qt Class Generationにあります。ここには3つの選択肢があります:http://doc.qt.io/qt-5/designer-using-a-ui-file.html –

+0

さて、私は解決策があると思います。私はカスタムクラスを使って独自の階層を実装し、この階層に生成されたUIクラスへのポインタを渡す必要があります。それにもかかわらず、私はUI XMLの深い階層が生成されたヘッダーファイルで平坦化されるのがベストプラクティスではないと思います。 – Soccertrash

答えて

1

現在のフォームでは既に「インターセプト」できますが、あなたは確かに別のセクションでAを分離し、メインウインドウにQWidgetを追加し、それを右クリックしてAに昇格させることができます。

+0

具体的な例がありますか?ありがとう – Soccertrash

+0

コードが含まれていない場合の例をここに与えるのは難しいです。ガイド付きの説明については、http://doc.qt.io/qt-5/designer-using-custom-widgets.html#promoting-widgetsをご覧ください。 – IlBeldus