2010-07-24 7 views
5

J'utilise une classe QWizard, qui contient plusieurs QWizardPage. Pour certaines pages, je dois faire quelque chose quand on clique sur le bouton "Suivant".Comment remplacer l'emplacement "suivant" dans un QWizard?

J'ai essayé d'écraser l'emplacement next dans ma classe QWizard; Cependant, il semble que cela ne fonctionne pas. Le programme est toujours entré dans l'emplacement d'origine next dans la classe QWizard parente au lieu de celle que j'ai implémentée.

Est-ce parce que cet emplacement next est protégé virtuellement? Comment puis-je faire certaines choses après avoir cliqué sur le bouton suivant?


Le fichier d'en-tête de ma classe QWizard est le suivant. En passant, le signal accept fonctionne très bien comme je m'y attendais.

#ifndef PRIMERWIZARD_H 
#define PRIMERWIZARD_H 

#include <QWizard> 

namespace Ui { 
    class PrimerWizard; 
} 

class PrimerWizard : public QWizard { 
    Q_OBJECT 
public: 
    PrimerWizard(QWidget *parent = 0); 
    ~PrimerWizard(); 
protected slots: 
    void next(); 
    void accept(); 

protected: 
    void changeEvent(QEvent *e); 

private: 
    Ui::PrimerWizard *ui; 
}; 

#endif // PRIMERWIZARD_H 

Je crée une nouvelle instance assistant via l'assistant de QtCreator (Ha XD)

Le code est le suivant:

PrimerWizard* pW = new PrimerWizard(this); 
pW->exec(); 

Et la connexion signal fente de next est créé par QtCreator, Je ne peux pas trouver où c'est connecté. Je pense que la connexion est construit en ui_PrimerWizard.h par cette fonction:

QMetaObject::connectSlotsByName(PrimerWizard); 
+0

J'ai une situation similaire. Dans mon cas, j'ai les pages de l'assistant 1-6, et à l'étape 4, je veux faire une requête http, attendre le rappel puis passer à l'étape 5. – PedroMorgan

Répondre

2

La fente next ne peut pas être écrasé. Cependant, la fonction validatePage pour QWizardPage peut. Cette fonction sera appelée lorsque le bouton "Suivant" ou "Terminer" est cliqué.

Questions connexes