-1

このフォームを使用して宣言されたクラスがあります

MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
{
    ...
}

このフォームを次のようにリファクタリングしたい:

class MainWindow : QMainWindow, ui 
{
    MainWindow(QWidget *parent)
    {
        ...
    }
}

ただし、最初のフォームにあったパラメーターは削除しました。このパラメータは何を意味しますか?

それらを2番目のフォームに保つ方法は?最初の構文を説明してください (またはチュートリアルを参照してください)。パラメータによる継承がわかりません。

編集:

私は今問題を理解しています。クラスは、私が最初に見たのではなかった別の .h ファイルで初期化されました。私は考えました:メソッド定義の後は継承演算子でしたが、メンバー初期化演算子です。

4

2 に答える 2

1

これはコンストラクターの実装であり、基本クラスコンストラクターを呼び出し、初期化リストのデータメンバーを初期化します。

MainWindow(QWidget *parent) :
        QMainWindow(parent),   // call base class constructor
        ui(new Ui::MainWindow) // initialize data member ui
{
    ...
}

クラスはから継承し、と呼ばれるデータメンバーQMainWindowを持っている可能性が非常に高いです。2番目のコードスニペットは、クラスを宣言するための誤った試みのようです。そのような「パラメータによる継承」はないので、あなたが求めていることを行うことはできません。Ui::MainWindow*ui

于 2012-09-05T16:22:32.427 に答える
0

最初はconstructorwithでinitializer-list initialization、この例はうまくいきます。2番目の例は構文が間違っているため、コンパイルされません。たとえば、これを見てください。この特定のケースでは、メンバー初期化子リストの使用とコンストラクターでの値の割り当てに違いがありますか?最初の構文についての説明。

于 2012-09-05T16:21:54.877 に答える