2012-07-31 5 views
0

J'ai essayé de créer une nouvelle fenêtre pour mon application. Je l'ai eu pour travailler et ouvrir la fenêtre, mais quand j'ai essayé d'ajouter ma forme de .ui il a juste cessé de fonctionner. Je suis désolé de ne pas savoir ce que je fais mal. Juste quelqu'un s'il vous plaît jeter un oeil sur le code et aider.Qt création d'une nouvelle fenêtre

#include "new_round.h" 
    #include "ui_NewRound.h" 

    New_Round::New_Round(QWidget *parent) : 
     QMainWindow(parent), 
     uinr(new Uinr::New_Round) 
    { 
uinr->setupUi(this); 
    } 
    New_Round::~New_Round() 
    { 
     delete uinr; 
    } 

C'était le fichier cpp pour la classe new_round maintenant voici l'en-tête.

#ifndef NEW_ROUND_H 
    #define NEW_ROUND_H 

    #include "new_round.h" 
    #include <QMainWindow> 

    namespace Uinr{ 
    class New_Round; 
    } 

    class New_Round : public QMainWindow 
    { 
     Q_OBJECT 
    public: 
     explicit New_Round(QWidget *parent = 0); 
     ~New_Round(); 

    private: 
     Uinr::New_Round *uinr; 
    }; 



    #endif // NEW_ROUND_H 

et voici l'erreur que je reçois 4

invalid use of incomplete type 'struct Uinr::New_Round' 
forward declaration of 'struct Uinr::New_Round' 
invalid use of incomplete type 'struct Uinr::New_Round' 
forward declaration of 'struct Uinr::New_Round' 

Je coulnt trouver des tutoriels sur ce sujet donc je sorte de juste regardé en arrière-et-vient entre mon mainwindow.h et mainwindow.cpp donc dans Je ne suis pas sûr de ce que j'ai fait de mal. Encore une fois j'ai eu la fenêtre à afficher, mais les formes NewRound.ui ne fonctionne pas. Aidez-moi!!

Répondre

0

Votre fichier d'en-tête #include s lui-même. Sortez ce #include et remplacez-le par #include ui_Newound.h et cela devrait fonctionner. Vous devrez peut-être exécuter qmake et nettoyer le projet en premier, et éventuellement supprimer manuellement le Makefile.

+0

Il n'a pas travaillé j'ai changé l'include et a couru qmake, nettoyé le projet et supprimé les fichiers make et redémarré Qt mais il n'a toujours pas fonctionné. – tyty5949

+0

@ user1438702 Comment avez-vous ajouté le formulaire? Avec l'option de menu QtCreator, ou manuellement? –

+0

via Fichier-> Nouveau fichier ou projet-> qt-> Nouveau formulaire de concepteur – tyty5949

0

Si j'ai bien compris, vous devez définir new_round comme suit, mais vous ne voulez pas inclure le fichier d'en-tête lui-même. En outre, vous voulez déclarer un pointeur de type Ui_NewRound, pas de type New_Round lui-même - je suppose que vous avez utilisé le concepteur pour créer ce code, auquel cas vous finissez avec une classe appelée Ui_NewRound. Aussi, ne vous embêtez pas avec l'espace de noms pour commencer, cela rend les choses trop compliquées. Donc, nous allons ici avec le fichier d'en-tête:

#ifndef NEW_ROUND_H 
#define NEW_ROUND_H 


#include <QMainWindow> 
#include "Ui_NewRound.h" 

// no including of new_round here -- this needs to be included in .cpp file instead 
class New_Round : public QMainWindow 
{ 
    Q_OBJECT 
public: 
    New_Round(QWidget *parent = 0); 
    ~New_Round(); 

private: 
    Ui_NewRound *nr; 


}; 

#endif 

qui sera enregistré comme new_round.h.

Dans le code Cpp, je alors

#include "new_round.h" 
#include "ui_NewRound.h" 


New_Round::New_Round(QWidget *parent) : 
    QMainWindow(parent) 
{ 
    nr = new ui_NewRound; 
    nr->setupUi(this); 
} 
New_Round::~New_Round() 
{ 
    delete nr; 
} 

Espérons que vous aide à démarrer!

Cheers,

Ben.

+0

Il me donne les erreurs: ISO C++ interdit la déclaration de 'Ui_NewRound' avec aucun type – tyty5949

+0

À droite, dans ce cas vous avez réellement besoin de créer une classe de Ui_NewRound - cela est généralement fait en utilisant le logiciel Qt designer. Ou vous pouvez le créer manuellement à la main! –

+0

ah je l'ai fait j'ai eu concepteur de formulaire qt ajouter un .ui .cpp et .h tout à la fois. il l'a fait automatiquement. – tyty5949