如何使用Qt Creator将对象的值从一个窗口转换为另一个窗口的类?

问题描述

| 这似乎应该是一个简单的问题。我的MainWindow中有两个QSpinBoxes,旁边有一个按钮。用户首先使用这些旋转框选择复选框数组的尺寸,然后单击按钮。这会弹出一个带有复选框阵列的新窗口。但是,我遇到的问题是,当我尝试在弹出窗口的代码获取旋转框的值时,由于这些按钮是私有的,因此我收到了编译器错误。这是代码
void DomainGeneration::createBoxes()
{
    int x_dim = MainWindow::ui->xDim->value();
    int y_dim = MainWindow::ui->yDim->value();
......the code......
}
编译器错误:   \'Ui :: MainWindow * MainWindow :: ui \'是   在这种情况下是私有的 和   参照中缺少对象   \'MainWindow :: ui \'从此位置开始 所以我的问题是,如何从其他窗口访问这些对象?     

解决方法

        您有两个问题:
MainWindow::ui
是私人的
MainWindow::ui
不是静态的,您需要一个MainWindow的实际实例才能到达它 要解决一个问题,通常在
MainWindow
中创建访问器方法(或需要导出其某些状态的任何类)。 要解决两个问题,您需要一个指向
MainWindow
实例的指针来调用这些访问器。 在您的MainWindow类中,定义如下内容:
int getXDim() const { return ui->xDim->value(); }
而要获取指向主窗口的指针,可以将其传递到DomainGeneration的构造函数中,也可以传递到
createBoxes()
方法中,具体取决于调用方式/位置以及是否在该位置的其他地方需要该指针。类。 就像是:
void DomainGeneration::createBoxes(MainWindow const* main)
{
  int x_dim = main->getXDim();
  ...
}
(或者显然将尺寸传递给该方法。) (这些都不是Qt特有的。这是普通的C ++。)