QT UI指针中缺少属性和方法

Missing attributes and methods in QT ui pointer

本文关键字:属性 方法 UI 指针 QT      更新时间:2023-10-16

我正在使用QT Creator构建用户接口。我已经创建了一个扩展QMainWindow的StartWindow类。创建后,我添加了新的方法和属性。自动QT创建者为标题文件生成了这种代码:

#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文件中给出I值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;

有人可以向我解释吗?

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

StartWindow object
      |   |
      i   ui

不喜欢这样:

StartWindow object
      |
      ui
      |
      i

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

iui都是类成员变量,您应该以访问ui的方式访问i

ui是启动窗口指针类型。

ui不是类型StartWindow*,它是Ui::StartWidow*类型。这是一个完全独立的类,尽管具有相同的名称,但在startwindow.h文件开头的Ui名称空间中被声明:

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

此类是由Designer创建的startwindow.ui文件的QT用户界面编译器生成的。默认情况下,该类通过调用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.h中定义了Ui::StartWindow类,该类应包括在startwindow.cpp类的开头。请查看此问题以获取有关ui_startwindow.h文件的信息。