2014-04-29 4 views
0

J'ai une classe:utilisation qt accident widget

class gameClientInteraction : public QMainWindow 

avec, dans le .h:

private : 
QTextEdit* console; 

mon constructeur est comme ceci:

gameClientInteraction::gameClientInteraction() 
{ 
// Menus 
QMenu *menuFichier = menuBar()->addMenu("&Jeu"); 
QAction *actionQuitter = new QAction("&Quitter", this); 
menuFichier->addAction(actionQuitter); 
connect(actionQuitter, SIGNAL(triggered()), qApp, SLOT(quit())); 


// View 
QGraphicsView *theGraphicsView = new QGraphicsView(this); 
theGraphicsView->setFixedSize(605,605); 

QTextEdit* console = new QTextEdit(this); 
console->setGeometry(0,625,600,100); 
console->setReadOnly(true); 
console->append("Bienvenue !"); 

setCentralWidget(theGraphicsView); 

//Scene 
theGraphicsView->setScene(m.afficheMap());//afficheMap give me a QGraphicsScene* 
} 

J'ai cette fonction ce crash mon programme quand je le lance (c'est correct quand je commente l'instruction).

void gameClientInteraction::msgConsole(QString msg){ 
    console->append(msg); 
} 

Alors, pourquoi est-ce qu'il plante avec cette instruction?

Répondre

1

Vous avez masqué la variable de membre de classe console dans votre constructeur en déclarant un pointeur local portant le même nom. En d'autres termes, ceci:

QTextEdit* console = new QTextEdit(this); 

devrait être ceci:

console = new QTextEdit(this); 

Comme alternative, envisagez d'utiliser une liste d'initialisation:

gameClientInteraction::gameClientInteraction() : console(new QTextEdit(this)) 
{ 
    // constructor code goes here 

    console->setGeometry(0,625,600,100); 
    console->setReadOnly(true); 
    console->append("Bienvenue !"); 
}