在 2 个表单 QT 之间传递变量

0 c++ forms qt

我是初学者,所以如果可以向我解释如何在两个表单之间传递变量,例如:我有第一个表单:Send.ui - send.cpp - send.h 和第二个表单:Receive.ui -接收.cpp - 接收.h

我们假设我在 Send.cpp 中有一个名为 age=25 的变量和一个按钮

我希望当我按下按钮时,他将打开第二个表单 Receive.ui,我将在第二个表单中拥有一个变量 age=25

如果我更改 Send.cpp 中的变量,他将在 Receive.cpp 中自动更改

并提前致谢

Luc*_*ros 5

对于对象之间的通信,Qt 有一种称为Signals 和 Slots的机制。

下面是一个如何使用信号和槽的例子:

在这个例子中,我将使用旋转框来直观地表示你提到的变量(年龄)。

1. 打开接收表单

在发送中,创建将打开接收表单的按钮。

发送.h

public:
    QPushButton *pushButton;
Run Code Online (Sandbox Code Playgroud)

发送.cpp

   pushButton = ui->pushButtonSend;
Run Code Online (Sandbox Code Playgroud)

现在在主窗口中创建一个插槽来显示接收表单。

主窗口.cpp

void MainWindow::showReceiveForm()
{
    receiveForm->show();
}
Run Code Online (Sandbox Code Playgroud)

主窗口.h

private slots:
    void showReceiveForm();
Run Code Online (Sandbox Code Playgroud)

现在将来自按钮的点击信号连接到 mainwindow.cpp 中的插槽。每次单击按钮时,这都会调用槽函数。

connect(sendForm->pushButton,SIGNAL(clicked()),this,SLOT(showReceiveForm()));
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明 2.发送年龄值

要将年龄值发送到接收表单,每当它的值在发送表单中更改时,将发送表单中来自QSpinBox的 valueChanged 信号连接到接收表单中的插槽。

发送.h:

public:
    QSpinBox *spinBox;
Run Code Online (Sandbox Code Playgroud)

发送.cpp

   spinBox = ui->spinBoxSend;
Run Code Online (Sandbox Code Playgroud)

receive.cpp 中的插槽:

void Receive::receiveAge(int age)
{
   ui->spinBoxReceive->setValue(age);
}
Run Code Online (Sandbox Code Playgroud)

现在在 mainwindow.cpp 中连接信号和插槽。

connect(sendForm->spinBox,SIGNAL(valueChanged(int)),receiveForm,SLOT(receiveAge(int)));
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

在这个例子中,我使用了来自 QPushButton 和 QSpinBox 的预定义信号,但是您可以创建自己的信号并随时发出它们。

在头文件中定义自定义信号:

signals:
    void exampleSignal(int someArgument);
Run Code Online (Sandbox Code Playgroud)

并使用“emit”关键字发出它们。

emit exampleSignal(somenumber);
Run Code Online (Sandbox Code Playgroud)