如何在Qt中预先建立的窗口之间传递数据?

时间:2017-07-28 01:55:57

标签: c++ qt

我有一个Wizard类,它在构造函数中以QStackedWidget的形式创建三个页面。每个页面都是自己的类。

在第一页中,我有各种各样的表单,并且我已经实现了在单击下一个按钮时分配它们的插槽。它们在Wizard类中分配给它们各自的变量。我的目标是将此信息传递给PageTwo类以进行适当的计算。有关如何做到这一点的任何指示?

向导类

class Wizard : public QDialog
{
    Q_Object
public: 
    Wizard();
    QString nameInput;
    etc
}

构造

Wizard::Wizard() : QDialog()
{
    pages = new QStackedWidget();
    pages->addWidget(pageOne = new PageOne(pages));
    pages->addWidget(pageTwo = new PageTwo(pages));
    connect(next, SIGNAL(clicked(bool)), this, SLOT(saveFormInfo()));
}

赋值函数

void Wizard::saveFormInfo()
{
    nameInput = pageOne->nameEdit->text();
    etc
}

PageTwo class

class PageTwo : public QWidget
{
public:
    PageTwo(QWidget *parent = 0);
    void displayOutput(QHboxLayout *layout);
}

这是正确的做法吗?这是我的第一个GUI项目,我似乎无法弄清楚如何传递变量,我假设因为页面是在数据传递之前创建的

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到。在不改变代码的情况下,下面有一个建议。

向导类

class Wizard : public QDialog
{
    Q_Object
public: 
    Wizard();
    QString nameInput;
    etc
}

Wizard::Wizard() : QDialog()
{
    pages = new QStackedWidget();
    pages->addWidget(pageOne = new PageOne(pages, this));
    pages->addWidget(pageTwo = new PageTwo(pages, this));
    connect(next, SIGNAL(clicked(bool)), this, SLOT(saveFormInfo()));
}

void Wizard::saveFormInfo()
{
    nameInput = pageOne->nameEdit->text();
    etc
}

在pagetwo.h

class Wizard;

class PageTwo : public QWidget
{
public:
    PageTwo(QWidget *parent = 0, Wizard * wizard);
    void displayOutput(QHboxLayout *layout);

private:
    Wizard * wizard;
}

在pagetwo.cpp

#include <wizard.h>

PageTwo::PageTwo(QWidget * parent, Wizard * w) :
    QWidget(parent), wizard(w)
{
}

然后,您可以使用this->wizard->nameInput在PageTwo上获得所需的值