C++ 如何从一个窗口到另一个窗口获取对象的值';Qt Creator的类?

C++ 如何从一个窗口到另一个窗口获取对象的值';Qt Creator的类?,c++,qt,C++,Qt,这似乎应该是一个简单的问题。我的主窗口中有两个QSpinbox,旁边有一个按钮。用户首先使用这些旋转框选择复选框数组的尺寸,然后单击按钮。这将弹出一个新窗口,其中包含一系列复选框。但我遇到的问题是,当我试图在弹出窗口的代码中获取spinbox的值时,我会得到一个编译器错误,因为这些按钮是私有的。代码如下: void DomainGeneration::createBoxes() { int x_dim = MainWindow::ui->xDim->value();

这似乎应该是一个简单的问题。我的主窗口中有两个QSpinbox,旁边有一个按钮。用户首先使用这些旋转框选择复选框数组的尺寸,然后单击按钮。这将弹出一个新窗口,其中包含一系列复选框。但我遇到的问题是,当我试图在弹出窗口的代码中获取spinbox的值时,我会得到一个编译器错误,因为这些按钮是私有的。代码如下:

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的实际实例才能访问它
  • 要解决一个问题,您通常在
    main窗口中创建访问器方法(或需要导出其某些状态的任何类)

    要解决这两个问题,您需要一个指向
    MainWindow
    实例的指针来调用这些访问器

    在MainWindow类中,定义如下内容:

    int getXDim() const { return ui->xDim->value(); }
    
    void DomainGeneration::createBoxes(MainWindow const* main)
    {
      int x_dim = main->getXDim();
      ...
    }
    
    要获取指向主窗口的指针,可以将其传递到DomainGeneration的构造函数中,也可以传递到
    createBox()
    方法中,具体取决于调用它们的方式/位置以及是否需要该类中的其他位置的指针

    比如:

    int getXDim() const { return ui->xDim->value(); }
    
    void DomainGeneration::createBoxes(MainWindow const* main)
    {
      int x_dim = main->getXDim();
      ...
    }
    
    (显然,也可以将尺寸传递给该方法。)


    (这都不是Qt特异性的,这是普通C++)

    你应该非常简单地把信息传递进去。当您调用新对话框的构造函数时,就有了它,所以只需传递它。