如何使用Qt Creator将对象的值从一个窗口获取到另一个窗口的类中?

How do I get the value of an object from one window into another window's class with Qt Creator?

本文关键字:窗口 获取 一个 另一个 Creator Qt 何使用 对象      更新时间:2023-10-16

这似乎应该是一个简单的问题。我的主窗口中有两个QSpinBox,旁边有一个按钮。用户首先使用这些旋转框选择复选框阵列的尺寸,然后单击按钮。这会弹出一个带有复选框阵列的新窗口。不过,我遇到的问题是,当我试图在弹出窗口的代码中获取旋转框的值时,我会遇到编译器错误,因为这些按钮是私有的。这是代码:

void DomainGeneration::createBoxes()
{
    int x_dim = MainWindow::ui->xDim->value();
    int y_dim = MainWindow::ui->yDim->value();
......the code......
}

编译器错误:

"Ui::MainWindow*MainWindow::Ui"是此上下文中的私有

引用中缺少对象来自此位置的"主窗口::ui"

所以我的问题是,如何从不同的窗口访问这些对象?

您有两个问题:

  1. MainWindow::ui是私有的
  2. 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++。)