我是初学者,所以如果可以向我解释如何在两个表单之间传递变量,例如:我有第一个表单:Send.ui - send.cpp - send.h 和第二个表单:Receive.ui -接收.cpp - 接收.h
我们假设我在 Send.cpp 中有一个名为 age=25 的变量和一个按钮
我希望当我按下按钮时,他将打开第二个表单 Receive.ui,我将在第二个表单中拥有一个变量 age=25
如果我更改 Send.cpp 中的变量,他将在 Receive.cpp 中自动更改
并提前致谢
对于对象之间的通信,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)
要将年龄值发送到接收表单,每当它的值在发送表单中更改时,将发送表单中来自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)