如何在Qt C++中将变量从MainWindow传递到SecondWindow

How to pass variable from MainWindow to SecondWindow in Qt C++

本文关键字:MainWindow SecondWindow 变量 Qt C++      更新时间:2023-10-16

我的主窗体上有一个名为pushButton_Tar1ex的按钮,上面有一些文本。我的主窗体上还有另一个名为pushButton_RenameTargets的按钮。

当我推送pushButton_RenameTargets时,执行以下代码:

void MainWindow::on_pushButton_RenameTargets_clicked()
{
RenameTargets renametargets;
renametargets.target1NameCurrent = ui->pushButton_Tar1ex->text();
renametargets.setModal(true);
renametargets.exec();
}

所以我的第二个窗口被称为RenameTargets函数中的第一行代码创建一个对象renametargets。然后我设置renametargets.target1NameCurrent = ui->pushButton_Tar1ex->text();哪个target1NameCurrent是公开的:renametargets.h的一部分。然后在重命名目标中,我通过以下方式将标签设置为按钮文本:

RenameTargets::RenameTargets(QWidget *parent) :
QDialog(parent),
ui(new Ui::RenameTargets)
{
ui->setupUi(this);
ui->label_currentNameTarget1->setText(target1NameCurrent);
}

然而,标签中没有出现任何内容label_currentNameTarget1.

我已经运行了一些 qDebug 的东西,发生的事情是当我按下按钮时运行RenameTargets renametargets;它会在声明renametargets.target1NameCurrent = ui->pushButton_Tar1ex->text();之前通过RenameTargets ui(new Ui::RenameTargets)部分。

我做错了什么? 任何帮助将不胜感激。

您在构造对象renametargets后设置renametargets.target1NameCurrent成员变量...这就是问题所在,因为您在构造函数中使用target1NameCurrent来设置标签。

一种解决方案是通过构造函数传递target1NameCurrent

void MainWindow::on_pushButton_RenameTargets_clicked()
{
RenameTargets renametargets(this, ui->pushButton_Tar1ex->text());
renametargets.setModal(true);
renametargets.exec();
}

重命名目标.cpp

RenameTargets::RenameTargets(QWidget *parent, const QString & target1NameCurrent):
QDialog(parent),
ui(new Ui::RenameTargets),
target1NameCurrent(target1NameCurrent)
{
ui->setupUi(this);
ui->label_currentNameTarget1->setText(target1NameCurrent);
}

重命名目标.h

class RenameTargets{
public:
RenameTargets(QWidget *parent, const QString & target1NameCurrent);
};

此外,您可以在构造renametargets并初始化renametargets.target1NameCurrent后,在RenameTargets的另一个函数中初始化label_currentNameTarget1