我正在使用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;
我收到此错误:
/home/carl/QT5Projects/DopProject/startwindow.cpp:13:错误:'class Ui :: StartWindow'没有名为'i'的成员
但我可以通过范围解析运算符
访问i
StartWindow::i = 0;
或
this->i = 0;
我也无法通过
访问i
this->ui->i = 0;
有人可以向我解释一下吗?
答案 0 :(得分:3)
StartWindow
班级有i
和ui
两个独立的数据成员。 i
不是ui
的成员,而是StartWindow
对象本身的成员。因此遏制是这样的:
StartWindow object
| |
i ui
而不是这样:
StartWindow object
|
ui
|
i
这就是您无法通过i
访问ui
的原因,但您必须直接访问它。
答案 1 :(得分:1)
i
和ui
都是类成员变量,您应该像访问i
一样访问ui
。
ui是一个StartWindow指针类型。
ui
类型为StartWindow*
的不,属于Ui::StartWidow*
类型。这是一个完全独立的类,尽管名称相同,但它在Ui
文件开头的startwindow.h
命名空间中声明:
#include <QMainWindow>
//class declaration
namespace Ui {
class StartWindow;
}
//...
此类由设计人员创建的startwindow.ui
文件中的Qt User Interface Compiler生成。默认情况下,通过调用StartWindow
成员函数,在setupUi()
类的构造函数的开头使用该类:
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
类在ui_startwindow.h
文件中定义,该文件应包含在startwindow.cpp
类的开头。有关ui_startwindow.h
文件的信息,请查看this question。