我正在用Qt Creator创建用户界面。我创建了一个扩展QMainWindow的StartWindow类。创建之后,我添加了新的方法和属性。 QT Creator自动为头文件生成这种代码:

#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;
};

现在,当我尝试从cpp文件中给我值2时:
ui->i = 2;

我收到此错误:



但是我可以通过范围解析运算符访问i
StartWindow::i = 0;

要么
this->i = 0;

我都无法通过访问i
this->ui->i = 0;

有人可以向我解释吗?

最佳答案

StartWindow类具有iui作为两个单独的数据成员。 i不是ui的成员,而是StartWindow对象本身的成员。因此,遏制是这样的:

StartWindow object
      |   |
      i   ui

而不是这样:
StartWindow object
      |
      ui
      |
      i

这就是为什么您无法通过i访问ui,而必须直接访问它。

10-06 03:41