2010-07-16 5 views
0

Je ne sais pas comment connecter deux formulaires, je suis en mesure d'ouvrir la deuxième forme, mais ne peut pas accéder au premier formulaire.À propos des signaux et des emplacements en qt

Mon programme:

#include<QApplication> 
#include<QLabel> 
#include<QPushButton> 
#include<QGridLayout> 

class form1 
{ 
    public: 
     QWidget *window1; 
     QLabel *l1; 
     QPushButton *b1; 
     QGridLayout *gl; 
     form1(){} 
     void setup1(); 
     void show1(); 


}; 

void form1::setup1() 
{ 
    window1=new QWidget(); 
    gl=new QGridLayout(window1); 
    l1=new QLabel("I AM IN FORM1",window1); 
    b1=new QPushButton("NEXT",window1); 
    gl->addWidget(l1,0,0); 
    gl->addWidget(b1,1,0); 
} 
void form1::show1() 
{ 
    window1->show(); 
} 

class form2 
{ 
    public: 
     QWidget *window2; 
     QPushButton *b2; 
     form2(){} 
     void setup2(); 
     void show2(); 

}; 

void form2::setup2() 
{ 
    window2=new QWidget(); 
    b2=new QPushButton("NEXT",window2); 
} 
void form2::show2() 
{ 
    window2->show(); 
} 


class Myclass:public QObject,public form1,public form2 
{ 


    public slots: 
     void open(); 
     void back(); 
    public: 
     Myclass() 
     { 
      setup1(); 
      setup2(); 
      QObject::connect(b1,SIGNAL(clicked()),window1,SLOT(open())); 
      QObject::connect(b2,SIGNAL(clicked()),window2,SLOT(back())); 
     } 


}; 

void Myclass::open() 
{ 
    //window1->hide(); 
    //window2->show(); 
    show2(); 
} 

void Myclass::back() 
{ 
    window2->hide(); 
    l1->setText("BACK FROM FORM2"); 
    window1->show(); 
} 

int main(int argc,char *argv[]) 
{ 
    QApplication app(argc,argv); 
    Myclass *m=new Myclass(); 
    m->show1(); 
    return app.exec(); 
} 
+0

S'il vous plaît modifier votre question, de sorte que le code source est lisible. – Lars

Répondre

1

Hmm comment le premier travail? Les deux méthodes open() et back() appartiennent à MyClass. Mais vos connexions vont à window1 et window2. Essayez si cela fonctionne pour "this" au lieu de window1/2.

0

Lorsque je démarre votre programme. Je reçois cette alerte qt warnigs:

Object::connect: No such slot QWidget::open() in question.h:44 
Object::connect: No such slot QWidget::back() in question.h:45 

Ainsi, vos connexions ne sont pas valides. Les emplacements sont définis dans Myclass pas dans window1 et window2. Remplacez-les par

QObject::connect(b1,SIGNAL(clicked()),this,SLOT(open())); 
QObject::connect(b2,SIGNAL(clicked()),this,SLOT(back())); 

ou moins:

connect(b1,SIGNAL(clicked()),this,SLOT(open())); 
connect(b2,SIGNAL(clicked()),this,SLOT(back())); 

et vous obtenez le comportement attendu.

Questions connexes