1

Qtを使ってプログラムを作る方法を学んでいます。私の質問は、私があまり得意ではない3つのこと、つまり、ポインター、オブジェクト、および「new()」についてです。

見てください:(ダイアログはクラスです)

//start of code...
...

private: 
    Dialog *mDialog; //Dialog is a class 

...

void MainWindow::on_activationNew_window_triggered()
{
    mDialog = new Dialog(this); // Explain me this "this"
}

...

//end of code

その行がどのように機能するか、「これ」が正確に何をするか(または何であるか)を説明してください。

私が知っているのは、mDialogはウィンドウのクラスであり、スコープが終了するとウィンドウが閉じるので、スタックメモリを使用するため、そのポインタを作成してnewを使用します。つまり、スコープが終了します。

彼が作成し、これを説明しているビデオの一部を見たい場合(おそらく私は十分に明確ではありませんでした)ここにビデオがあります(8:07に開始):

http://www.youtube.com/watch?v=wUH_gu2HdQE&feature=relmfu

助けてくれてありがとう!

4

4 に答える 4

2

「this」はc++の概念です....オブジェクト(この例ではMainWindow)の内部で作業する場合、これは同じオブジェクトへのポインターです。

つまり、C ++でDogというクラスを作成するとします。私のメソッドでは、現在のオブジェクトをこれとして参照できます。

class Dog
{
public: 
Dog(); //default constructor
Dog(const Dog&); //copy constructor

};

Dog::Dog(const Dog& original)
{
if (&original != this)
 //do whatever;
}
于 2012-10-27T00:51:31.617 に答える
2

他の人が言っているように、「これ」はそれが呼ばれるところからのオブジェクトを指します。と同じように:

class X {
  public:
    int y;
};

あなたが書くなら

X obj_X;

obj_Xには、「this」という名前の変数があります。これは、それ自体にアクセスするために使用され、クラスオブジェクトを別のメソッド/クラス/その他に渡す際に最もよく使用されます。

さて、Qtについて:)

すべてのQtオブジェクトには親があります。これはQtの内部動作の多くに使用されますが、オブジェクトが別のオブジェクトを所有しているようなものです。親オブジェクトと子を指定するには、親のアドレスを子のコンストラクターに送信します。

したがって、Dialog mDialog(this);を実行することもできます。

これは、「新しい」演算子とは何の関係もないことを意味します。それでは、それに取り掛かりましょう:

Dialog mDialog(/*< constructor parameters >*/); << HERE!

「this」はmDialogのコンストラクターに送信され、親があることを指定します。そして、その親は「this」が指すオブジェクトです。あなたもそれをすることができます

Dialog mDialog(); // In which case mDialog has NO parent, because 0 parameteres went to the constructor

とても簡単です:)。C ++の本を入手してコンストラクターの詳細を読んだり、インターネットでQtチュートリアルを入手したりしてください。幸運を!

于 2012-10-27T01:19:00.383 に答える
1

(非静的)メンバー関数は、クラス型の暗黙的なパラメーターで呼び出される関数です。定義では

void MainWindow::on_activationNew_window_triggered()
{ //...
}

MainWindow::定義されている関数がクラスのメンバー関数であることを意味しますMainWindow。(非静的)メンバー関数では、キーワードthisはその暗黙の引数へのポインターです。(また、のようなクラスメンバーに名前を付けるだけの場合は、member実際にはの略ですthis->member。)

したがって、引用した関数では、のタイプはthisですMainWindow* const

コードがコンストラクターMainWindowへのポインターを渡しているようです。Dialog

于 2012-10-27T00:53:47.433 に答える
1

thisクラス(またはunionまたはstruct)に属する非静的メンバー関数で使用できるポインターを指します。これは、メンバー関数が呼び出されるオブジェクト(この場合はMainWindow)を指します。

のコンストラクターに渡される理由はDialog、Qtのオブジェクトモデルによるものです。詳細については、次のドキュメントを参照してください。

http://qt-project.org/doc/qt-4.8/objecttrees.html

于 2012-10-27T00:56:07.437 に答える