在两种形式QT之间传递变量

时间:2016-05-04 18:26:30

标签: c++ forms qt

我是初学者,所以如果有可能向我解释如何在2个表单之间传递变量,例如: 我有第一个Form:Send.ui - send.cpp - send.h 第二种形式叫做:Receive.ui - receive.cpp - receive.h

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

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

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

并感谢advence

1 个答案:

答案 0 :(得分:2)

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

以下是如何使用信号和插槽的示例:

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

<强> 1。打开接收表单

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

send.h

public:
    QPushButton *pushButton;

send.cpp

   pushButton = ui->pushButtonSend;

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

mainwindow.cpp

void MainWindow::showReceiveForm()
{
    receiveForm->show();
}

mainwindow.h

private slots:
    void showReceiveForm();

现在将点击信号从按钮连接到mainwindow.cpp中的插槽。这将在每次单击按钮时调用插槽功能。

connect(sendForm->pushButton,SIGNAL(clicked()),this,SLOT(showReceiveForm()));

enter image description here 2。发送年龄值

要将年龄值发送到接收表单,只要在发送表单中更改了其值,请将发送表单中QSpinBox的valueChanged信号连接到接收表单中的插槽。

send.h:

public:
    QSpinBox *spinBox;

send.cpp

   spinBox = ui->spinBoxSend;

receive.cpp中的插槽:

void Receive::receiveAge(int age)
{
   ui->spinBoxReceive->setValue(age);
}

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

connect(sendForm->spinBox,SIGNAL(valueChanged(int)),receiveForm,SLOT(receiveAge(int)));

enter image description here

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

在标题文件中定义自定义信号:

signals:
    void exampleSignal(int someArgument);

然后发出&#34; emit&#34;关键字。

emit exampleSignal(somenumber);