2016-12-15 6 views
1

Qt Creatorでユーザーインターフェイスを構築しています。 QMainWindowを拡張したStartWindowクラスを作成しました。作成後、新しいメソッドと属性を追加しました。私は、私に値2を与えるしようとすると、CPPファイルから、今QT UIポインタの属性とメソッドがありません

#include <QMainWindow> 
namespace Ui { 
class StartWindow; 
} 

class StartWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
explicit StartWindow(QWidget *parent = 0); 
~StartWindow(); 
public: 
int i; 
private: 
Ui::StartWindow *ui; 
}; 

:自動的QT Creatorは、ヘッダファイルのためにこの種のコードを生成

ui->i = 2; 

私はこのエラーを取得する:

/home/carl/QT5Projects/DopProject/startwindow.cpp:13: error: 'class Ui::StartWindow' has no member named 'i'

が、私は、スコープ解決演算子を通じてiにアクセスすることができ

StartWindow::i = 0; 

または

this->i = 0; 

どちらもない私は

this->ui->i = 0; 

を通じてiにアクセスすることができます誰かが私にそれを説明してもらえますか?

+4

あなたは 'ui'から' i'にアクセスする必要があると思いますか?'i'と' ui'はどちらもクラスメンバ変数です。あなたが 'ui'にアクセスしているのと同じ方法で' i'にアクセスする必要があります。 – Mike

+0

uiはStartWindowポインタ型なので –

答えて

3

StartWindowクラスは、2つの別個のデータメンバーとしてiおよびuiを持っています。 iuiのメンバーではなく、StartWindowオブジェクトのメンバーです。したがって、封じ込めは、このようなものです。このような

StartWindow object 
     | | 
     i ui 

及びません:

あなたが uiを通じて iにアクセスすることはできませんが、直接アクセスしなければならない理由です
StartWindow object 
     | 
     ui 
     | 
     i 

1

iuiの両方がクラスメンバー変数であるため、uiと同じ方法でiにアクセスする必要があります。

ui is a StartWindow pointer type.

uiタイプStartWindow*ではない、それはUi::StartWidow*型です。これは完全に別のクラスで、同じ名前を持つにもかかわらず、それはあなたのstartwindow.h、ファイルの先頭にUi名前空間で宣言されています。

#include <QMainWindow> 
//class declaration 
namespace Ui { 
class StartWindow; 
} 
//... 

このクラスが作成されているstartwindow.uiファイルからQt User Interface Compilerによって生成されますデザイナーによって。デフォルトでは、クラスがそのsetupUi()メンバ関数を呼び出すことによって、あなたのStartWindowクラスのコンストラクタの最初に使用されます。

StartWindow::StartWindow(QWidget *parent) : 
    QMainWindow(parent), 
    //an instance of Ui::StartWindow is created 
    ui(new Ui::StartWindow) 
    //^^^^^^^^^^^^^^^^^^^^^ 
{ 
    //the instance is used to create the widgets and set up layouts 
    //that you have defined in the designer 
    ui->setupUi(this); 
    //... 
} 

Ui::StartWindowクラスは、あなたのstartwindow.cppクラスの先頭に含まれるべきファイルui_startwindow.hで定義されています。 ui_startwindow.hファイルについては、this questionをご覧ください。

関連する問題