2015-12-24 1 views
1

Je travaille sur Qt 4.8.5. J'utilise une structure QWizard avec ses QWizardPages (nommez-les wp1, wp2, wp3, ...). J'ai besoin de passer une valeur de wp2 à wp4 mais chaque fois que je l'essaie, je reçois une chaîne vide :( La valeur dont j'ai besoin est sur une variable (QString sVar;) donc pas un widget et j'ai essayé certaines choses:Qt: Comment passer la valeur variable entre QWizardPages et registerField()

  1. en utilisant RegisterField avec les itselfs de wizardpage (comme toujours un type de QWidget) comme ceci: registerField("myField",this); mais ofcourse quand je vais à GT4 et essayer de qDebug()<< "data: " << field("myField").toString(); est vide
  2. J'ai vu dans certains forums. ppl disant que vous pouvez créer un Q_PROPERTY et ensuite utiliser le champ de registre.Je l'ai mis comme Q_PROPERTY sData READ getData() WRITE setDATA() puis avec registerField("myfield, this, ... et ici j'ai un problème parce que je m'attends à ce que sData apparaisse mais ce n'est pas le cas

Donc ... une idée sur la façon dont je peux y parvenir en utilisant registerField (je sais que je peux aussi créer mon propre slot et signal, l'émettre de wp2 et le rattraper sur wp4 mais je voudrais l'éviter si possible)

Ajouté la solution:

classe Ah:

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; 

classe A constructeur:

registerField("AP_field",this, "sAP", SIGNAL(APChanged())); 

classe A :: fonction initializePage():

switch(m_iVar) 
{ 
case 0 :... 
    break; 
case 1: 
    setAP("AP1"); 
    emit APChanged(); 
    break; 
} 

Et puis dans la classe B (où vous avez besoin de savoir que les données):

qDebug() << " AP QPROPERTY = " <<field ("AP_Field").toString(); 

Répondre

2

Selon le docs:

Lorsque nous créons un champ en utilisant QWizardPage :: registerField(), nous transmettons un nom de champ unique et un widget. Nous pouvons également fournir un nom de propriété Qt et un signal "modifié" (un signal qui est émis lorsque la propriété change) en tant que troisième et quatrième arguments; cependant, ce n'est pas nécessaire pour les widgets Qt les plus courants, tels que QLineEdit, QCheckBox, et QComboBox, car QWizard sait quelles propriétés rechercher.

Alors vous avez toujours besoin d'un signal, mais Qt va gérer les connexions nécessaires pour vous et attrapera votre nouvelle valeur lorsque vous la changerez. Vous devez vous enregistrer comme ceci:

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

Ensuite, vous devez vous rappeler d'émettre le signal chaque fois que vous changez votre variable, et bien sûr l'enregistrer comme une propriété.

+0

Merci! Je n'ai pas vu cette partie !! – Megasa3