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 :

Crash de mon appli après un QInputDialog::getText


Sujet :

Qt

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Septembre 2007
    Messages : 267
    Points : 119
    Points
    119
    Par défaut Crash de mon appli après un QInputDialog::getText
    Bonjour,

    Je fais une application de reconnaissance musicale qui proposera des liens vers des sites une fois la musique reconnue.

    Ca sera un programme en arrière plan, pas de MainWindow, juste une icone avec un menu dans le system tray.

    J'utilise QtCreator.

    J'ai un problème avec le QInputDialog::getText , une fois appelé et lorsque l'on clic sur OK, l'icone n'apparait plus dans le system tray et je suis obligé de forcer l'arret du programme via QtCreator. A noter que le travail en arrière plan fonctionne toujours après la disparition de l'icone, dans le code ci dessous, j'ai même remplacement du texte dans "apikey.txt".

    J'ai mis en pièce jointe les principaux fichiers, et ici le code spécifique qui ne fonctionne pas :


    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
    void Window::changeTexte16()
    {
        bool dialogResult;
        QString key;
        QFile keyFile("apikey.txt");
     
        if(!keyFile.exists()){
            keyFile.open(QIODevice::WriteOnly);
            QTextStream keyStream1(&keyFile);
            keyStream1 << "XXXXXXXXXXXXXXXXX";
            keyFile.close();
        }
     
        // Open apikey.txt and copy content in key (string)
        keyFile.open(QIODevice::ReadOnly);
        QTextStream keyStream2(&keyFile);
        key = keyStream2.readLine();
        keyFile.close();
     
        QString result = QInputDialog::getText(this, "Echonest API Key", "Enter your API key:", QLineEdit::Normal,
                                               key, &dialogResult);
     
     
        if(dialogResult) {
            keyFile.open(QIODevice::WriteOnly);
            QTextStream keyStream3(&keyFile);
            keyStream3 << result;
            keyFile.close();
        }
    }
    Je vous remercie d'avance pour votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Septembre 2007
    Messages : 267
    Points : 119
    Points
    119
    Par défaut
    j'ai essayé un exemple minimal, ca fait pareil, voici le code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "mainwindow.h"
    #include <QApplication>
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.hide();
     
        return a.exec();
    }
    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
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
     
    #include <QWidget>
    #include <QSystemTrayIcon>
     
    class MainWindow : public QWidget
    {
        Q_OBJECT
     
    public:
        MainWindow();
        ~MainWindow();
        QSystemTrayIcon* sticon;
        QAction* actTexte1;
        QAction* actTexte3;
    public slots:
        void changeTexte1();
        void changeTexte3();
     
    };
     
    #endif // MAINWINDOW_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
    #include "mainwindow.h"
    #include <QSystemTrayIcon>
    #include <QWidget>
    #include <QMenu>
    #include <QtGui>
    #include <QApplication>
    #include <QInputDialog>
     
    MainWindow::MainWindow()
    {
        sticon = new QSystemTrayIcon(this);
        QIcon icon(":/music.png");
        sticon->setIcon(icon);
     
        QMenu* stmenu = new QMenu(NULL);
        actTexte1 = new QAction("test",NULL);
        actTexte3 = new QAction("exit",NULL);
        stmenu->addAction(actTexte1);
        stmenu->addAction(actTexte3);
        sticon->setContextMenu(stmenu);
        sticon->show();
        connect(actTexte1, SIGNAL(triggered()), this, SLOT(changeTexte1()));
        connect(actTexte3, SIGNAL(triggered()), this, SLOT(changeTexte3()));
    }
     
    MainWindow::~MainWindow()
    {
    }
     
    void MainWindow::changeTexte1()
    {
        bool dialogResult;
        QString result = QInputDialog::getText(this, "Echonest API Key", "Enter your API key:", QLineEdit::Normal,
                                               "key", &dialogResult);
     
    }
     
    void MainWindow::changeTexte3()
    {
        QApplication::quit();
        exit(1);
    }

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    267
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Septembre 2007
    Messages : 267
    Points : 119
    Points
    119
    Par défaut
    c'est résolu avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a.setQuitOnLastWindowClosed(false);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Confirmation avant fermeture de mon appli = crash
    Par declencher dans le forum Delphi
    Réponses: 2
    Dernier message: 24/03/2015, 12h58
  2. Réponses: 13
    Dernier message: 09/09/2014, 16h28
  3. Réponses: 4
    Dernier message: 08/03/2012, 09h12
  4. [WD16] Mon appli ne se lance pas apres GPWLogin
    Par jcpas dans le forum WinDev
    Réponses: 7
    Dernier message: 21/11/2011, 08h46
  5. Réponses: 6
    Dernier message: 19/05/2006, 16h02

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