我正在开发 Qt 4.8.5。我正在使用 QWizard 结构及其 QWizardPages(让它们命名为 wp1、wp2、wp3,...)。我需要将一个值从 wp2 传递到 wp4 但每次尝试时,我都会得到一个空字符串:( 我需要的值是一个变量(QString sVar;),所以不是一个小部件,我已经尝试了一些东西:
- 将 RegisterField 与向导页面本身一起使用(因为它仍然是一种 qwidget),如下所示:
registerField("myField",this);
但当然,当我去 wp4 并尝试qDebug()<< "data: " << field("myField").toString();
它是空的。 - 我在一些论坛上看到有人说你可以创建一个 Q_PROPERTY 然后使用寄存器字段。我将其设置为
Q_PROPERTY sData READ getData() WRITE setDATA()
然后用registerField("myfield, this, ...
在这里我遇到了一个问题,因为我希望 sData 出现,但它没有出现。
所以...关于如何使用 registerField 实现此目的的任何想法(我知道我也可以创建自己的插槽和信号,从 wp2 发出它并在 wp4 上 catch 它,但如果可能的话我想避免它)
添加了解决方案:
A.h 类:
class ClassA: public QWizardPage
{
Q_OBJECT
Q_PROPERTY(QString sAP READ getAP WRITE setAP)
....
public:
QString getAP() const {return AP;}
void setAP(QString s){AP=s;};
private:
QString AP;
A类构造函数:
registerField("AP_field",this, "sAP", SIGNAL(APChanged()));
A类::initializePage()函数:
switch(m_iVar)
{
case 0 :...
break;
case 1:
setAP("AP1");
emit APChanged();
break;
}
然后在 B 类中(您需要知道该数据):
qDebug() << " AP QPROPERTY = " <<field ("AP_Field").toString();
最佳答案
根据docs :
When we create a field using QWizardPage::registerField(), we pass a unique field name and a widget. We can also provide a Qt property name and a "changed" signal (a signal that is emitted when the property changes) as third and fourth arguments; however, this is not necessary for the most common Qt widgets, such as QLineEdit, QCheckBox, and QComboBox, because QWizard knows which properties to look for.
所以你仍然需要一个信号,但 Qt 将为你处理必要的连接,并在你更改它时捕获你的新值。您必须像这样注册:
registerField("myField", this, "myProperty", SIGNAL(myPropertyChanged()));
然后你必须记住每次更改变量时发出信号,当然还要将其注册为属性。
关于c++ - Qt:如何使用 registerField() 在 QWizardPages 之间传递变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34452603/