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