C++ Qt:如何使用registerField()在QWizardPages之间传递变量值

C++ Qt:如何使用registerField()在QWizardPages之间传递变量值,c++,qt,wizard,qt4.8,C++,Qt,Wizard,Qt4.8,我正在研究Qt4.8.5。我正在使用QWizard结构及其QWizardPages(让我们将它们命名为wp1、wp2、wp3……)。我需要将一个值从wp2传递到wp4,但每次尝试时,都会得到一个空字符串:( 我需要的值是一个变量(QString sVar;),所以不是一个小部件,我尝试了一些方法: 将RegisterField与向导页面一起使用(它仍然是qwidget的一种类型)如下:RegisterField(“myField”,this);但当然,当我转到wp4并尝试使用qDebug()时,

我正在研究Qt4.8.5。我正在使用QWizard结构及其QWizardPages(让我们将它们命名为wp1、wp2、wp3……)。我需要将一个值从wp2传递到wp4,但每次尝试时,都会得到一个空字符串:( 我需要的值是一个变量(QString sVar;),所以不是一个小部件,我尝试了一些方法:

  • 将RegisterField与向导页面一起使用(它仍然是qwidget的一种类型)如下:
    RegisterField(“myField”,this);
    但当然,当我转到wp4并尝试使用
    qDebug()时,根据:

    当我们使用QWizardPage::registerField()创建字段时,传递一个 唯一的字段名和小部件。我们还可以提供Qt属性名 以及“改变”信号(当属性 更改)作为第三个和第四个参数;但是,这不是必需的 对于最常见的Qt小部件,如QLineEdit、QCheckBox和 因为QWizard知道要查找哪些属性

    因此,您仍然需要一个信号,但Qt将为您处理必要的连接,并在您更改它时捕获新值。您必须按如下方式注册:

    registerField("myField", this, "myProperty", SIGNAL(myPropertyChanged()));
    

    然后,您必须记住每次更改变量时都要发出信号,当然要将其注册为属性。

    这适用于发出信号的部分但不是所有小部件。对于QDoubleSpinWidgets,
    QWizard::setDefaultProperty(“QDoubleSpinBox”、“value”、信号(valueChanged(double));
    这是因为valueChanged()用于QString和double…不知道在没有参数指定的情况下取哪个值:
    每次值更改时,QDoubleSpinBox都会发出两个valueChanged()信号,一个接收一个double,另一个接收一个QString。QString重载为值提供前缀()和后缀()doc.qt.io/qt-5/qdoublespinbox.html我希望这不会困扰其他人,这是一个完整的解决方案,没有警告、错误或不可预测的行为。

    谢谢!我没有看到这部分!!
    registerField("AP_field",this, "sAP", SIGNAL(APChanged()));
    
    switch(m_iVar)
    {
    case 0 :...
        break;
    case 1: 
        setAP("AP1");
        emit APChanged();
        break;
    }
    
    qDebug() << " AP QPROPERTY = " <<field ("AP_Field").toString();
    
    registerField("myField", this, "myProperty", SIGNAL(myPropertyChanged()));