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

时间:2016-11-25 02:02:56

标签: c++ qt

我的主窗体上有一个名为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中我将标签设置为pushbuttontext:

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

}

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

RenameTargets.cpp

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

}

RenameTargets.h

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

};

此外,您可以在构建label_currentNameTarget1并初始化RenameTargets之后,在renametargets中的其他函数中初始化renametargets.target1NameCurrent