1

QT Creator を使用して ui ファイル (例: mainwindow.ui) を含むプロジェクトをビルドすると、その .ui ファイルのクラス定義 (例: ui_mainwindow.h) を含む .h ファイルが自動的に生成されることがわかっています。.h で生成されるクラスは次のようになります。

qt .ui ファイル生成クラス

私の質問は、生成されたクラスを次のようにする方法です。

QT_BEGIN_NAMESPACE

class Ui_MainWindow : MyBaseWindow
{
public:
    QMenuBar *menuBar;
    QToolBar *mainToolBar;
    QWidget *centralWidget;
    QStatusBar *statusBar;
4

1 に答える 1

3

あなたの問題は典型的な XY 問題です。間違った問題に対する答えを探しているのです。

はい、いくつかの基本的なメソッドを追加できるようにしたいですUi_MainWindow

いいえ、あなたはしません。あなたがしたと思ったことは忘れてください。主張する場合は、質問を編集して、何をしようとしているのかを正確に示す必要があります。追加しようとしているメソッドと、それらは何を行い、何のために行うのですか? あなたのアプローチが最初に理にかなっている可能性が高いことを私たちに納得させるのはあなたの責任です.

このUi_MainWindowクラスは、変更されることを意図したものではありません。Qt Designerおそらく、コード エディターとして使用しようとしていますか? そうではありません。この.uiファイルは、コードを保持するためのものではありません。したがって、それから生成された出力は、あなたが書いたコードを運ぶことを意図したものではなく、GUI の設計を実装するコードのみです。

メソッドを追加する場合は、Ui::クラスを使用するウィジェットに直接追加する必要があります。結局のところ、これは一連のポインターを保持するために使用される値クラスです。ウィジェット内に値で保存し、メソッドをウィジェット クラス自体に追加する必要があります。ウィジェット クラスをクラスから派生させることもできますUi::

class MyWidget : public QWidget, protected Ui::MyWidget {
  ...
};

これにより、メソッド自体MyWidgetに追加したメソッドと同じくらい優れたメソッドが作成されUi::MyWidgetます。

で生成されたクラスを変更したいというインスタンスに1 回だけ遭遇したことがあり、それはメソッドをそれに追加することでした。これは便宜上、既存のコードの修正を最小限に留めるために行われました。そのためには、派生クラスにメソッドを追加します。uic

template <typename T> MyUi : public T {
  void myMethod();
};

class MyWidget : public QWidget {
  MyUi<Ui::MyWidget> ui;
  ...
  MyWidget(QWidget *parent = nullptr) : QWidget(parent) {
    ui.setupUi(this);
    ui.myMethod();
  }
};
于 2016-12-02T16:32:04.483 に答える