gpt4 book ai didi

c++ - 在 2 个窗体 QT 之间传递变量

转载 作者:行者123 更新时间:2023-11-28 02:07:10 26 4
gpt4 key购买 nike

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

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

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

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

提前致谢

最佳答案

对于对象之间的通信,Qt 有一个机制叫做 Signals and Slots .

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

在此示例中,我将使用旋转框直观地表示您提到的变量(年龄)。

<强>1。打开接收表单

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

发送.h

public:
QPushButton *pushButton;

发送.cpp

   pushButton = ui->pushButtonSend;

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

主窗口.cpp

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

主窗口.h

private slots:
void showReceiveForm();

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

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

enter image description here<强>2。发送年龄值

要将年龄值发送到接收表单,只要它的值在发送表单中发生更改,请连接来自 QSpinBox 的 valueChanged 信号。以发送形式发送到接收形式的插槽。

发送.h:

public:
QSpinBox *spinBox;

发送.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);

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

emit exampleSignal(somenumber);

关于c++ - 在 2 个窗体 QT 之间传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37035272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com