2009-11-01 4 views
0

Je ne fais que commencer par Qt. Bien que je passe quelque temps dessus ce soir, j'ai du mal à déplacer mon code d'installation de l'interface utilisateur de main dans sa propre classe.Déplacement du code d'interface utilisateur Qt vers une classe distincte

#include <QtGui> 

int main(int argc, char *argv[]) { 

    QApplication app(argc, argv); 

    QWidget *window = new QWidget; 
    QLabel *hw = new QLabel(QObject::tr("Hello World!")); 

    QHBoxLayout *layout = new QHBoxLayout; 
    layout->addWidget(hw); 
    window->setLayout(layout); 
    window->show(); 

    return app.exec(); 

} 

J'ai essayé de faire ma propre classe et passer à window mais courir dans des erreurs de compilation.

main.cpp:

#include <QtGui> 
#include "hworld.h" 

int main(int argc, char *argv[]) { 

    QApplication app(argc, argv); 

    QDialog *hWorld = new hWorld; 
    hWorld->show(); 

    return app.exec(); 

} 

hworld.h:

#ifndef HWORLD_H 
#define HWORLD_H 

#include <QtGui> 

class hWorld : public QDialog { 

    Q_OBJECT 

public: 
    hWorld(QWidget *parent = 0); 
    ~hWorld(); 

private: 
    void setup(); 

}; 

#endif // HWORLD_H 

hworld.cpp:

#include <QtGui> 
#include "hworld.h" 

hWorld :: hWorld(QWidget *parent) : QDialog(parent) { 

    setup(); 

} 

hWorld :: ~hWorld() { } 

void hWorld :: setup() { 

    QLabel *hw = new QLabel(QObject::tr("Hello World!")); 

    QHBoxLayout *layout = new QHBoxLayout; 
    layout->addWidget(hw); 

    setLayout(layout); 
    setWindowTitle("Test App"); 

} 

erreurs de compilation:

main.cpp: In function ‘int main(int, char**)’: 
main.cpp:8: error: expected type-specifier before ‘hWorld’ 
main.cpp:8: error: cannot convert ‘int*’ to ‘QDialog*’ in initialization 
main.cpp:8: error: expected ‘,’ or ‘;’ before ‘hWorld’ 
make: *** [main.o] Error 1 

Changement main, signifie que cette compile, mais je reçois une fenêtre vide (parce que les constructeurs ne les appelle pas?):

QDialog hWorld; 
hWorld.show(); 

Répondre

5

ne devriez-vous utiliser un nom différent pour la classe et la variable instanciée?

QDialog *hWorld = new hWorld; 

est assez déroutant et la source de l'erreur que vous obtenez, utilisez HWorld pour la classe à la place (par exemple), car il est fréquent de commencer un nom de type avec un boîtier supérieur (boîtier de chameau supérieure).

De même, le changement de QWidget à QDialog est-il exprès?

+0

Merci. Oui, je l'ai changé en QDialog, mais j'ai codé le code ensemble à partir de divers exemples de code. J'ai fait les changements que vous avez suggérés et ça fonctionne maintenant. –

+1

Pensé ainsi, et les deux fonctionnent réellement dans votre exemple de toute façon. Amusez-vous avec Qt, c'est un cadre très puissant et pratique! :-) – RedGlyph

Questions connexes