IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Problème QToolBar génère une erreur à l'execution


Sujet :

Qt

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut Problème QToolBar génère une erreur à l'execution
    Bonjour à tous,
    J'ai un projet de stage à effectuer et j'ai décidé de me tourner vers et d'apprendre Qt (en C++) pour ce faire (notez donc que je suis novice en la matière)

    Je vous explique mon problème:

    Je souhaite créer une barre d'outils dans ma fenetre principale, j'arrive à créer un outil dans cette boite, mais dès que j'en ajoute au moins un, le programme compile mais plante à l'exécution (le fameux et célèbre "ne pas envoyer" :p )

    Voici mon code:
    le .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #include <QApplication>
    #include <QMenu>
    #include <QMenuBar>
    #include <QToolBar>
    #include <QWidget> // inheriting class's header file
     
     
    class FenetrePrincipale : public QWidget
    {
    	public:
    		FenetrePrincipale();
    		~FenetrePrincipale();
     
        private:
            QMenuBar *menubar;
            QToolBar *outilbar;
            QMenu *fichier;   
            QMenu *edition;
            QMenu *recherche;
            QMenu *aide;
            QAction *nouveau;
            //QAction *ouvrir;
            //QAction *enregistrer;
     
    };
    Le .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    #include "fenetreprincipale.h" // class's header file
     
     
    FenetrePrincipale::FenetrePrincipale()
    {
     
         setFixedSize(900, 550);
     
         // Création du menuBar et toolBar
         menubar = new QMenuBar(this);
         outilbar = new QToolBar(this);
     
     
         // Création d'un menu déroulant "Fichier, edition, ..."
         fichier = new QMenu("Fichier", this);
         edition = new QMenu("Edition", this);
         recherche = new QMenu("Recherche", this);
         aide = new QMenu("Aide", this);
         //actions de la toolBar
         nouveau = new QAction("nouveau", this);
     
     
         // et ajout du menu fichier à la barre de menu principale
         menubar->addMenu(fichier);
         menubar->addMenu(edition);
         menubar->addMenu(recherche);
         menubar->addMenu(aide);
     
         //création d'action pour la barre d'outil
         outilbar->addAction(nouveau);
         //outilbar->addAction(ouvrir);
         //outilbar->addAction(enregistrer);
     
         //déplacement de la barre d'outil en dessous de la barre de menu
         outilbar->move(0, 20);
     
         // Ajout d'un item "Ouvrir" dans fichier
         fichier->addAction("Nouveau");
         fichier->addAction("Ouvrir", this, SLOT(ouvirFichier()));
         fichier->addAction("Enregister");
         fichier->addAction("Enregister sous...");
     
         // Ajout d'un item "Quitter" que l'on connecte au slot "close" de la mainWindows
         fichier->addAction( "Fermer",this,SLOT(close()) );
     
     
     
    }
     
     
    FenetrePrincipale::~FenetrePrincipale()
    {
     
    }

    et enfin le main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <QApplication>
    #include "FenetrePrincipale.h"
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        FenetrePrincipale fenetre;    
        fenetre.show(); 
        return app.exec();
    }

    Je précise que je tape le code sous DevC++ et que je compile avec la console de Qt (version OpenSource)
    Merci d'avance pour vos futurs éclairissements

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Salut,

    Quelques petits trucs :

    Si tu veux faire une fenêtre principale, utilise plutôt QMainWindows.
    Si tu utilises les signaux/slots, tu dois inclure la macro Q_OBJECT dans ton header.
    Tu n'as pas besoin de destructeur.
    Je ne connais pas l'utilisation du addAction("monAction",monparent,SLOT(monSlot)). Perso, je déclare l'action à part, en lui donnant son texte, et je la connecte au slot correspondant. C'est peut être plus "propre" surtout si tu utilise la même action à plusieurs endroits (dans un menu et dans ta barre d'outils par exemple).
    Regarde les exemples intégrés sur ce thème (MainWindows).

    Bonne chance

    g.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Salut,
    d'abord merci pour la réponse.

    Où puis-je trouver un petit tuto sur la classe MainWindow? Ou ne serais-ce que quelque chose pour me permettre de débuter correctement.

    J'ai justement déjà regarder MainWindow mais je m'y suis un peu perdu et le peu que j'ai chercher sur le web, je suis resté sans grand résultat (je dis "le peu que j'ai cherché" car le fait de tout recommencer ne m'enchantais pas vraiment non plus.

    Pour ce qui est du reste, il n'y a que mon second objet QAction qui fait planter mon programme (il compile pourtant très bien, et fonctionne aussi très bien avec un seul QAction)
    En effet, j'avais oublié Q_OBJECT, mais cela ne change rien au disfonctionnement.
    Pour ce qui est du destructeur, il à été créé implicitement donc je l'ai laissé tel quel, sans m'en préocuper (je ne savais pas qu'on pouvais l'enlever )
    Pour les slots, en effets ça doit être plus propre :p

    Regarde les exemples intégrés sur ce thème (MainWindows).
    Tu parles d'une recherche sur le forum? En tout cas je vais essayer. Merci
    Si toutefois quelqu'un trouve une explication à mon problème, je suis prêt à l'entendre, ne serais-ce que par curiosité si je change de tactique.

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Tu parles d'une recherche sur le forum? En tout cas je vais essayer.
    Non, je parle des exemples de Qt . Vas dans ton dossier Qt/bin et lance qtdemo.exe (si tu es sous windows). Tu vas avoir pas mal de beaux trucs a regarder . Y'a un thème qui s'appelle "Main Windows" et là tu devrais trouver le genre de truc qui t'intéresse.

    Tu peux tester l'appli en appuyant sur "Launch" et tu peux avoir des explications en appuyant sur "Documentation". Dans la doc, tu as en plus les liens vers les fichiers source de l'exemple (qui t'aideront à résoudre ton problème je pense).

    Bonne chance

    g.

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    En effet, en quelques secondes j'ai pu trouver un code qui ressemble à ce que je veux dans ma MainWindow. J'ai à peine survolé pour le moment, je regarde ce que je peux en faire!

    Merci bien
    (j'attends tout de même de savoir si quelqu'un a une résolution de mon premier problème, et de comment le contrer ou trouver l'erreur qui fait que ça plante, on sait jamais je pourrais une nouvelle fois etre coincé la dessus plus tard...)

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Voila, j'ai fait une application de type QMainWindow (uniquement à partir des exemples demo de Qt)
    j'ai à peine remanier pour comprendre un peu ce que contenais le programme en entier, ça compile, mais ici encore je me retrouve avec l'erreur d'execution classique.

    Y'a t-il un moyen pour savoir d'où vient l'erreur lorsqu'on rencontre ce problème? ou dois-je tatonner les yeux fermés dans mon code en espérant tomber dessus?

    Merci d'avance

    EDIT: autre chose, il y a dans le programme des .png pour les icones d'une ToolBar, j'ai mis des .ico à a place, je ne sais pas si tout type de fichiers est accepté

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Salut,

    Euh pour tout erreur, donne nous plus d'infos. Est ce que ca plante des le lancement, ou lorsque tu appuies sur tes boutons ? Tu n'as aucun warning a la compilation ?
    Je ne connais pas DEV C++, mais il doit sans doute y avoir un debogueur, as tu essayé de faire une version debug ?

    Sinon, pour les formats supportés, tu peux commencer par lire ça. Et, sans avoir vérifié, il me semble que les .ico sont des bitmap non ? wikipedia doit avoir la réponse. En tout cas, le png est plus portable et surtout moins lourd.

    G.

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Pour les .ico, j'ai pris la peine de les convertir de toutes façon, mais j'irai voir tout ça quand même

    Je n'ai aucun warning lorsque je compile (avec la Qt Command Prompt, je le rappelle au cas ou), je n'en ai d'ailleurs jamais eu il me semble (ou alors j'y ai pas fait assez attention, cela m'étonne maintenant qu'on en parle).

    dès que je lance monprogramme.exe dans l'invite de commande, le message d'erreur s'affiche (d'où le fait que je ne trouve pas l'erreur, si encore c'etait un bouton qui me faisait ça, j'aurai peut être déjà une toute petite piste)

    Etant donné que je ne compile pas avec DevC++, puis-je tout de même effectuer un Debug utilisable dans l'invite de commande de Qt? (je ne connais pas du tout les debug, encore une chose qu'on ne nous a pas apprise à l'école...)

    EDIT: J'ai vérifié, les .ico ont été dévelopés par Microsoft alors que les .png l'ont été par W3C, je n'ai pas trouvé de lien entre les deux, donc je suppose que c'est ce qui embetait mon programme (malheuresement j'ai tout changer dans ce dernier en même temps que je changais mes .ico en .png, je vais retester en incluant des .ico donc...)

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Je ne sais pas trop ce que tu appelles "la Qt command prompt", mais quoi qu il arrive, je pense qu'il est possible d'utiliser ton débogueur sur ton appli. Apres, l'utilisation, un bon débogueur, lorsque tu utilise une version débug, te dis tout de suite ou ca a planté. Sinon, il faut mettre des points d'arret, ou lancer ton programme en pas à pas, c'est à dire (grossierement) qu'il éxécute ton programme ligne par ligne. Et donc tu vois rapidement quelle ligne pose problème.

    Il doit avoir une aide intégrée dans ton IDE pour ton débogueur, ou les infos ne doivent pas manquer sur le net.

    Sinon, si c'est pas trop privé, joins ton code complet, j'y jeterai un oeil -de débutant- (j'ai un peu de temps ajd).

    G.

  10. #10
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    je vais faire quels tests alors

    par contre ne ce moment même, j'ai un autre problème, je ne peux plus compiler mon projet si j'ai executé mon programme, il faut que je redemmare le PC.
    Le programme ne se ferme donc pas correctement, mais je ne le trouve pas dans la liste des processus dans mon gestionnaire de tache...

    mon programme n'est ni plus ni moins que celui proposé dans les demos de Qt (celui même que vois m'aviez proposé donc)
    je n'y ai changé que le nom de mes images pour le moment (il me semble :p)

    je place le code:
    le main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <QApplication>
    #include "FenetrePrincipale.h"
    #include <QtGui>
     
    int main(int argc, char *argv[])
    {
     
         QApplication app(argc, argv);
         FenetrePrincipale fenetre;
         fenetre.show();
     
         return app.exec();
    }

    le .h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    #ifndef FENETREPRINCIPALE_H
    #define FENETREPRINCIPALE_H
     
    #include <QtGui>
    #include <QApplication>
    #include <QMessageBox>
    #include <QFileDialog>
    #include <QListWidget>
    #include <QTextEdit>
    #include <Qmenu>
    #include <QAction>
    #include <QMainWindow> // inheriting class's header file
     
     
    class FenetrePrincipale : public QMainWindow
    {
          Q_OBJECT
     
    	public:
    		FenetrePrincipale();
     
        protected:
            void closeEvent(QCloseEvent *event);
     
        private slots:
            void newFile();
            void open();
            bool save();
            bool saveAs();
            void about();
            void documentWasModified();
     
        private:
            void createActions();
            void createMenus();
            void createToolBars();
            void createStatusBar();
            void readSettings();
            void writeSettings();
            bool maybeSave();
            void loadFile(const QString &fileName);
            bool saveFile(const QString &fileName);
            void setCurrentFile(const QString &fileName);
            QString strippedName(const QString &fullFileName);
     
            QTextEdit *textEdit;
            QString curFile;
     
            QMenu *fileMenu;
            QMenu *editMenu;
            QMenu *helpMenu;
            QToolBar *fileToolBar;
            QToolBar *editToolBar;
            QAction *newAct;
            QAction *openAct;
            QAction *saveAct;
            QAction *saveAsAct;
            QAction *exitAct;
            QAction *cutAct;
            QAction *copyAct;
            QAction *pasteAct;
            QAction *aboutAct;
            QAction *aboutQtAct;   
     
    };
     
    #endif // FENETREPRINCIPALE_H
    le .cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    #include "fenetreprincipale.h" // class's header file
     
     
    FenetrePrincipale::FenetrePrincipale()
    {
         textEdit = new QTextEdit;
         setCentralWidget(textEdit);
     
         createActions();
         createMenus();
         createToolBars();
         createStatusBar();
     
         readSettings();
     
         connect(textEdit->document(), SIGNAL(contentsChanged()),
                 this, SLOT(documentWasModified()));
     
         setCurrentFile("");
    }
     
     
     void FenetrePrincipale::closeEvent(QCloseEvent *event)
     {
         if (maybeSave()) {
             writeSettings();
             event->accept();
         } else {
             event->ignore();
         }
     }
     
     void FenetrePrincipale::newFile()
     {
         if (maybeSave()) {
             textEdit->clear();
             setCurrentFile("");
         }
     }
     
     void FenetrePrincipale::open()
     {
         if (maybeSave()) {
             QString fileName = QFileDialog::getOpenFileName(this);
             if (!fileName.isEmpty())
                 loadFile(fileName);
         }
     }
     
     bool FenetrePrincipale::save()
     {
         if (curFile.isEmpty()) {
             return saveAs();
         } else {
             return saveFile(curFile);
         }
     }
     
     bool FenetrePrincipale::saveAs()
     {
         QString fileName = QFileDialog::getSaveFileName(this);
         if (fileName.isEmpty())
             return false;
     
         return saveFile(fileName);
     }
     
     void FenetrePrincipale::about()
     {
        QMessageBox::about(this, tr("About Application"),
                 tr("The <b>Application</b> example demonstrates how to "
                    "write modern GUI applications using Qt, with a menu bar, "
                    "toolbars, and a status bar."));
     }
     
     void FenetrePrincipale::documentWasModified()
     {
         setWindowModified(textEdit->document()->isModified());
     }
     
     void FenetrePrincipale::createActions()
     {
         newAct = new QAction(QIcon(":/images/nouveau.png"), tr("&Nouveau"), this);
         newAct->setShortcut(tr("Ctrl+N"));
         newAct->setStatusTip(tr("Create a new file"));
         connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));
     
         openAct = new QAction(QIcon(":/images/ouvrir.png"), tr("&Ouvrir..."), this);
         openAct->setShortcut(tr("Ctrl+O"));
         openAct->setStatusTip(tr("Open an existing file"));
         connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
     
         saveAct = new QAction(QIcon(":/images/enregistrer.png"), tr("&Enregistrer"), this);
         saveAct->setShortcut(tr("Ctrl+S"));
         saveAct->setStatusTip(tr("Save the document to disk"));
         connect(saveAct, SIGNAL(triggered()), this, SLOT(save()));
     
         saveAsAct = new QAction(tr("Save &As..."), this);
         saveAsAct->setStatusTip(tr("Save the document under a new name"));
         connect(saveAsAct, SIGNAL(triggered()), this, SLOT(saveAs()));
     
         exitAct = new QAction(tr("E&xit"), this);
         exitAct->setShortcut(tr("Ctrl+Q"));
         exitAct->setStatusTip(tr("Exit the application"));
         connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));
     
         cutAct = new QAction(QIcon(":/images/couper.png"), tr("Couper"), this);
         cutAct->setShortcut(tr("Ctrl+X"));
         cutAct->setStatusTip(tr("Cut the current selection's contents to the "
                                 "clipboard"));
         connect(cutAct, SIGNAL(triggered()), textEdit, SLOT(cut()));
     
         copyAct = new QAction(QIcon(":/images/copier.png"), tr("&Copier"), this);
         copyAct->setShortcut(tr("Ctrl+C"));
         copyAct->setStatusTip(tr("Copy the current selection's contents to the "
                                  "clipboard"));
         connect(copyAct, SIGNAL(triggered()), textEdit, SLOT(copy()));
     
         pasteAct = new QAction(QIcon(":/images/coller.png"), tr("&Coller"), this);
         pasteAct->setShortcut(tr("Ctrl+V"));
         pasteAct->setStatusTip(tr("Paste the clipboard's contents into the current "
                                   "selection"));
         connect(pasteAct, SIGNAL(triggered()), textEdit, SLOT(paste()));
     
         aboutAct = new QAction(tr("&About"), this);
         aboutAct->setStatusTip(tr("Show the application's About box"));
         connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));
     
         aboutQtAct = new QAction(tr("About &Qt"), this);
         aboutQtAct->setStatusTip(tr("Show the Qt library's About box"));
         connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
     
         cutAct->setEnabled(false);
         copyAct->setEnabled(false);
         connect(textEdit, SIGNAL(copyAvailable(bool)),
                 cutAct, SLOT(setEnabled(bool)));
         connect(textEdit, SIGNAL(copyAvailable(bool)),
                 copyAct, SLOT(setEnabled(bool)));
     }
     
     void FenetrePrincipale::createMenus()
     {
         fileMenu = menuBar()->addMenu(tr("&File"));
         fileMenu->addAction(newAct);
         fileMenu->addAction(openAct);
         fileMenu->addAction(saveAct);
         fileMenu->addAction(saveAsAct);
         fileMenu->addSeparator();
         fileMenu->addAction(exitAct);
     
         editMenu = menuBar()->addMenu(tr("&Edit"));
         editMenu->addAction(cutAct);
         editMenu->addAction(copyAct);
         editMenu->addAction(pasteAct);
     
         menuBar()->addSeparator();
     
         helpMenu = menuBar()->addMenu(tr("&Help"));
         helpMenu->addAction(aboutAct);
         helpMenu->addAction(aboutQtAct);
     }
     
     void FenetrePrincipale::createToolBars()
     {
         fileToolBar = addToolBar(tr("File"));
         fileToolBar->addAction(newAct);
         fileToolBar->addAction(openAct);
         fileToolBar->addAction(saveAct);
     
         editToolBar = addToolBar(tr("Edit"));
         editToolBar->addAction(cutAct);
         editToolBar->addAction(copyAct);
         editToolBar->addAction(pasteAct);
     }
     
     void FenetrePrincipale::createStatusBar()
     {
         statusBar()->showMessage(tr("Ready"));
     }
     
     void FenetrePrincipale::readSettings()
     {
         QSettings settings("Trolltech", "Application Example");
         QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint();
         QSize size = settings.value("size", QSize(400, 400)).toSize();
         resize(size);
         move(pos);
     }
     
     void FenetrePrincipale::writeSettings()
     {
         QSettings settings("Trolltech", "Application Example");
         settings.setValue("pos", pos());
         settings.setValue("size", size());
     }
     
     bool FenetrePrincipale::maybeSave()
     {
         if (textEdit->document()->isModified()) {
             QMessageBox::StandardButton ret;
             ret = QMessageBox::warning(this, tr("Application"),
                          tr("The document has been modified.\n"
                             "Do you want to save your changes?"),
                          QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
             if (ret == QMessageBox::Save)
                 return save();
             else if (ret == QMessageBox::Cancel)
                 return false;
         }
         return true;
     }
     
     void FenetrePrincipale::loadFile(const QString &fileName)
     {
         QFile file(fileName);
         if (!file.open(QFile::ReadOnly | QFile::Text)) {
             QMessageBox::warning(this, tr("Application"),
                                  tr("Cannot read file %1:\n%2.")
                                  .arg(fileName)
                                  .arg(file.errorString()));
             return;
         }
     
         QTextStream in(&file);
         QApplication::setOverrideCursor(Qt::WaitCursor);
         textEdit->setPlainText(in.readAll());
         QApplication::restoreOverrideCursor();
     
         setCurrentFile(fileName);
         statusBar()->showMessage(tr("File loaded"), 2000);
     }
     
     bool FenetrePrincipale::saveFile(const QString &fileName)
     {
         QFile file(fileName);
         if (!file.open(QFile::WriteOnly | QFile::Text)) {
             QMessageBox::warning(this, tr("Application"),
                                  tr("Cannot write file %1:\n%2.")
                                  .arg(fileName)
                                  .arg(file.errorString()));
             return false;
         }
     
         QTextStream out(&file);
         QApplication::setOverrideCursor(Qt::WaitCursor);
         out << textEdit->toPlainText();
         QApplication::restoreOverrideCursor();
     
         setCurrentFile(fileName);
         statusBar()->showMessage(tr("File saved"), 2000);
         return true;
     }
     
     void FenetrePrincipale::setCurrentFile(const QString &fileName)
     {
         curFile = fileName;
         textEdit->document()->setModified(false);
         setWindowModified(false);
     
         QString shownName;
         if (curFile.isEmpty())
             shownName = "untitled.txt";
         else
             shownName = strippedName(curFile);
     
         setWindowTitle(tr("%1[*] - %2").arg(shownName).arg(tr("Application")));
     }
     
     QString FenetrePrincipale::strippedName(const QString &fullFileName)
     {
         return QFileInfo(fullFileName).fileName();
     }

    Apparement le titre de la fenetre créée est "Application" et mon programme se nomme testMainWindow mais je ne trouve aucun des deux dans mes processus

  11. #11
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Bon, les .ico ne posent pas de problème, je pense que je vais laisser le MainWindow tel quel, ça m'embète beaucoup, parce que j'aime pas recopier comme ça une doc mais j'ai autre chose à faire que de me préocuper de la fenetre principale du programme, je repasserais donc dessus plus tard.

    Les icones n'apparaissent tout de même pas, qu'elles soient .png ou .ico
    Et le fait de redemarrer mon ordi après chaque monprogramme.exe m'embète aussi :s

  12. #12
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    T'as bien mis à jour le fichier ressource?

  13. #13
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    oui tout à fait, désolé de ne pas l'avoir précisé,
    peut être que je ne le mets pas au bon endrois par contre.

    Etant donné que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newAct = new QAction(QIcon(":/images/nouveau.png"), ...
    Je place donc mon fichier "images" dans le répertoire qui contient mon projet

    mais pour le fichier ressources, ou dois-je le placer?, il est lui aussi pour le moment dans mon fichier contenant mon projet.

    EDIT: voici le contenu de mon fichier ressource, nommé ici "application.qrc"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <!DOCTYPE RCC><RCC version="1.0">
    <qresource>
         <file>images/copier.png</file>
         <file>images/couper.png</file>
         <file>images/nouveau.png</file>
         <file>images/ouvrir.png</file>
         <file>images/coller.png</file>
         <file>images/enregistrer.png</file>
    </qresource>
    </RCC>

  14. #14
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Oui il te manque le qrc. Il faut aussi que tu ajoutes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RESOURCES += application.qrc
    dans ton .pro

    Il est important de réaliser dès maintenant (j'ai mis du temps à le faire) que le fichier .pro est un élément clé de tout projet Qt. Il est nécessaire de bien comprendre à quoi il sert, comment il fonctionne, et il faut également connaître les options les plus courantes.
    La prochaine fois, tu peux directement mettre un .rar de ton dossier contenant tous tes fichiers. Ca sera plus simple et plus complet.

    Sinon, chez moi, ca compile bien, ca s execute bien (avec le fichier ressources bien utilisé) et ca se ferme correctement.

    A mon avis, le problème principal vient de ton .pro et/ou de ta façon de compiler. Prends le temps de comprendre quelque chose a l'outil qmake.

    Bonne chance

  15. #15
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Citation Envoyé par Gulish Voir le message
    Omettre un .rar
    .zip ou .tar.gz
    Section Qt => multi plateforme => autant utiliser des formats un tantinet ouvert (ou disons qui ne nécessite pas des paquets pas très légaux sous linux )

  16. #16
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    .zip ou .tar.gz
    Autant pour moi. On mettra ça sur le compte de la déformation professionnelle dont le service informatique de ma boite est responsable (tous ces logiciels propriétaires ...). Quelqu'un veut un .doc ?

  17. #17
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Oui il te manque le qrc.
    Il me le manque où au juste? Dans mon code seulement? (je me dis que tu n'as peut être pas vu l'EDIT de mon précédent message)

    Je vais regarder pour mettre comme il faut la ligne de code que tu m'as fournie

    Je pense avoir la bonne méthode pour compiler:
    qmake -project --> qmake --> make
    Et je pense aussi savoir à quoi sert le .pro déjà, apparement c'est le fichier généré par qmake -project réunissant tous les fichiers nécessaires à mon programme. (dites mois si je me trompe).

    EDIT: il y avait cette ligne-ci dans le programme d'origine, mais elle me posait problème dans le miens (surement parce que j'avais pas un bon .qrc à l'époque ou j'essayais de faire de la QMainWindow encore)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Q_INIT_RESOURCE(application);
    je sais donc maintenant à quoi elle sert, j'essaie tout de suite.

  18. #18
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-rel
    oc -Wl,-s -mthreads -Wl -Wl,-subsystem,windows -o release\testMainWindow.exe rel
    ease/fenetreprincipale.o release/main.o release/moc_fenetreprincipale.o release/
    qrc_application.o  -L"c:\Qt\4.3.4\lib" -lmingw32 -lqtmain -lQtGui4 -lQtCore4
    C:\MinGW\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot open output file release\testMainWindow.exe: Permission denied
    collect2: ld returned 1 exit status
    mingw32-make[1]: *** [release\testMainWindow.exe] Error 1
    mingw32-make[1]: Leaving directory `C:/Documents and Settings/BMG/Bureau/testMainWindow'
    mingw32-make: *** [release] Error 2
    Voici le type d'erreur qu'il me retourne, la même je crois qu'il arriverai si j'avais laisser mon programme en fonctionnement tout en compilant.

  19. #19
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Alors pour que tes icônes s'affichent, il faut :
    1)Que tu mettes ton "application.qrc" dans ton dossier ou il y a ton code source
    2)Que les noms des images spécifiées dans le "application.qrc" correspondent à ceux que tu appeles dans ton programme (tu as traduis en français en l'occurence, vérifies qu'il n'y ait pas d'erreurs).
    3)Il faut que tu ajoutes dans ton code (au début du main)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Q_INIT_RESOURCE(application) //même nom que le fichier sans l'extension
    4)Il faut ajouter dans ton monProjet.pro la ligne que j'ai posté plus tôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RESOURCES += application.qrc
    ------------------------------------------------------------

    EDIT: il y avait cette ligne-ci dans le programme d'origine, mais elle me posait problème dans le miens (surement parce que j'avais pas un bon .qrc à l'époque ou j'essayais de faire de la QMainWindow encore)
    Code :

    Q_INIT_RESOURCE(application);

    je sais donc maintenant à quoi elle sert, j'essaie tout de suite.
    Tiens oui j'avais pas fait gaffe qu'elle manquait. Pourtant c'est bizarre, même sans, ça marche (en ajoutant le lien dans le .pro). Mais oui, il faut que tu la laissse cette ligne oui.

    ------------------------------------------------------------
    Je pense avoir la bonne méthode pour compiler:
    qmake -project --> qmake --> make
    Et je pense aussi savoir à quoi sert le .pro déjà, apparement c'est le fichier généré par qmake -project réunissant tous les fichiers nécessaires à mon programme. (dites mois si je me trompe).
    Oui la méthode est bonne. Le mieux est de faire une seule fois le qmake -project et après de le modifier à la main. Le fichier .pro, pour être un peu plus précis, est une liste de commandes (options ou arguments) pour qmake. Quand tu appeles qmake, il utilise ces valeurs pour créer les makefiles, qui seront ensuite utilisés par make.
    Il y a des options qui te permettront de choisir le type d'application (exécutable, bibliothèque, mode console, etc...), de spécifier des chemins pour les dépendances, etc ... Tout cela est pas mal résumer ici.

    J'espère que ce post pourra t'aider.

    g.

  20. #20
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    En gros, il n'arrive pas à remplacer ton exécutable. Cela en effet problablement dû au fait que ton application tourne encore, même si tu l'a fermé.
    As tu bien regardé dans le gestionnaire de processus s'il n'y a pas un testMainWindow.exe qui traîne?
    Sinon tu peux toujours essayer de faire un clean avec make (je ne connais plus les commandes exactes). Ou alors tout simplement de le supprimer à la main.
    Sinon tu peux ( et c'est mieux dans ton cas) compilé en version debug (au moins une fois entre 2 redémarrage ).

Discussions similaires

  1. Process.Start génère une erreur
    Par jerome.fortias dans le forum C#
    Réponses: 6
    Dernier message: 17/09/2007, 15h31
  2. Source du fichier plat : trop de ligne génère une erreur
    Par Monico dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/08/2007, 16h04
  3. Exécutable qui génére une erreur windows
    Par jouidos dans le forum Windows Forms
    Réponses: 4
    Dernier message: 22/01/2007, 15h50
  4. .lib qui génère une erreur au link
    Par mrshadow dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 19/01/2007, 10h47
  5. [VB6] Problème de textbox multiligne qui génére une erreur
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/02/2006, 16h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo