2010-07-24 6 views
5

Estoy usando una clase QWizard, que contiene varios QWizardPage. Para algunas páginas, necesito hacer algo cuando se hace clic en el botón "Siguiente".¿Cómo puedo sobrescribir el "siguiente" espacio en un QWizard?

Traté de sobrescribir la ranura next en mi clase QWizard; sin embargo, parece que esto no funciona. El programa todavía entró en la ranura original next en la clase primaria QWizard en lugar de la que implementé.

¿Esto se debe a que esta ranura next está protegida virtual? ¿Cómo puedo hacer algunas cosas después de hacer clic en el siguiente botón?


A continuación, aparece el archivo de encabezado de mi clase QWizard. Por cierto, la señal accept funciona bien como esperaba.

#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 

puedo crear una nueva instancia del asistente a través del asistente de QtCreator (Ha XD)

El código es el siguiente:

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

Y la conexión de la ranura de la señal de next es creado por QtCreator, No puedo encontrar dónde está realmente conectado. Creo que la conexión está construido en ui_PrimerWizard.h por esta función:

QMetaObject::connectSlotsByName(PrimerWizard); 
+0

Tengo una situación similar. En mi caso, tengo las páginas del asistente, pasos 1 a 6, y en el paso 4, deseo hacer una solicitud http, esperar la devolución de llamada y luego pasar al paso 5. – PedroMorgan

Respuesta

2

La ranura next no se puede sobrescribir. Sin embargo, la función validatePage para QWizardPage puede. Esta función se ejecutará cuando se haga clic en el botón "Siguiente" o "Finalizar".

Cuestiones relacionadas