gpt4 book ai didi

c++ - Qt:如何使用 registerField() 在 QWizard 页面之间传递变量值

转载 作者:行者123 更新时间:2023-11-30 03:45:53 26 4
gpt4 key购买 nike

我正在使用 Qt 4.8.5。我正在使用一个带有 QWizardPages 的 QWizard 结构(我们将它们命名为 wp1、wp2、wp3,...)。我需要将一个值从 wp2 传递到 wp4 但每次尝试时,我都会得到一个空字符串:(我需要的值在变量 (QString sVar;) 上,所以不是小部件,我已经尝试了一些东西:

  1. 将 RegisterField 与 wizardpage 本身一起使用(因为它仍然是一种 qwidget),如下所示:registerField("myField",this);但当然当我去 wp4 并尝试 qDebug()<< "data: " << field("myField").toString();它是空的。
  2. 我在一些论坛上看到有人说您可以创建一个 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() 在 QWizard 页面之间传递变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34452603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com