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 :

Programme terminé subitement en utilisant deux fenêtre différentes


Sujet :

Qt

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 19
    Points : 16
    Points
    16
    Par défaut Programme terminé subitement en utilisant deux fenêtre différentes
    Bonjour,
    Mon problème est le suivant:
    Je souhaiterais mettre à disposition, dans la fenêtre principale du programme, plusieurs outils de traitement de fichier, sélectionnable via leur bouton attitré.
    L'un de ces boutons doit, lorsqu'il est cliqué, permettre de choisir un fichier.txt et l'afficher dans une seconde fenêtre (un QDialog) afin d'être modifié (puis d'autre actions seront possible à l'avenir).
    Nom : mainSensi.png
Affichages : 216
Taille : 28,4 Ko

    Cependant, lorsque je clique sur le bouton "Voir/Modifier le fichier", je choisis mon fichier puis le programme s'arrête avec l'erreur "Le programme s'est terminé subitement".
    Voici mes fichiers ainsi que le code de la méthode concerné:
    Nom : fileProjet.png
Affichages : 197
Taille : 20,1 Ko

    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
    AcceuilSensi.h
    #ifndef ACCEUILSENSI_H
    #define ACCEUILSENSI_H
     
    #include <QMainWindow>
    #include <QDebug>
    #include <QString>
    #include <QFileDialog>
    #include <QFile>
    #include <QFileInfo>
    #include <QInputDialog>
    #include <QMessageBox>
    #include <QApplication>
    #include <QTranslator>
    #include <QLocale>
    #include <QLibraryInfo>
    #include <QRegularExpression>
    #include "dialtext.h"
    #include "ui_dialtext.h"
     
    QT_BEGIN_NAMESPACE
    namespace Ui { class acceuilSensi; }
    QT_END_NAMESPACE
     
    class acceuilSensi : public QMainWindow
    {
        Q_OBJECT
     
    public:
        acceuilSensi(QWidget *parent = nullptr);
        DialText dialtext;
        ~acceuilSensi();
     
    private slots:
        void on_btnParser_clicked();
     
        void on_btnSuppDouble_clicked();
     
        void on_btnLister_clicked();
     
        void on_btnComparer_clicked();
     
        void on_btnSearchMail_clicked();
     
        void on_btnSeeFile_clicked();
     
    private:
        Ui::acceuilSensi *ui;
        Ui::DialText *dial;
        QDir defaultDir= (QDir::homePath() + "/Documents");
        int parser(QString filename);
        int delDoublons(QString filename);
        int lister(QString filename, QString separateur);
        int compare(QString file1, QString file2);
        QStringList count(QString file1, QString file2);
        int searchMail(QString filename);
        int showFile(QString filename);
     
    };
    #endif // ACCEUILSENSI_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
    acceuilSensi.cpp
    #include "acceuilsensi.h"
    #include "ui_acceuilsensi.h"
     
    acceuilSensi::acceuilSensi(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::acceuilSensi)
     
    {
        ui->setupUi(this);
        QDir::setCurrent(QDir::homePath() + "/Documents");
    }
     
    acceuilSensi::~acceuilSensi()
    {
        delete ui;
    }
     
    int acceuilSensi::showFile(QString filename)
    {
        int res = 0;
        //bool save = 0;
        QFile openFile(filename);
        if(openFile.open(QIODevice::ReadOnly | QIODevice::Text))
        {
            QTextStream flux(&openFile);
            QString text = flux.readAll();
            dialtext.show();
            dial->plainText->setPlainText(text);
     
        }
        else
        {
            qDebug() << "ERREUR: Le fichier n'a pas put être ouvert.";
            res = 1;
        }
     
        return res;
    }
     
    void acceuilSensi::on_btnSeeFile_clicked()
    {
     
        QString file;
        QFileDialog dialFile;
        dialFile.setDirectory(defaultDir);
        file = dialFile.getOpenFileName();
     
        if(!file.isEmpty())
        {
            int res = showFile(file);
            ui->labelStatut->setText("Fait: fin de l'opération");
        }
     
    }
    Je précise que je code sur la version Linux de QtCreator. Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    C'est à peu près normal: tu alloues, effectivement, la mémoire à ton pointeur ui (qui correspond à la fenêtre principale), ce qui lui permet de s'afficher, mais tu n'alloues pas la mémoire pour dial.

    Résultat, quand tu écris le code dial->show, tu déréférences un pointeur qui ne pointe sur aucune adresse mémoire, ou, du moins, qui ne pointes très certainement pas vers l'adresse d'un Ui::DialText. Comment veux-tu que ton application fasse autre chose que de planter dans ce genre de situation
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Salut, et merci pour ta réponse je comprends déjà mieux.
    Cela dit, je débute dans l'utilisation de deux fenêtres et est pour habitude de ne m'occuper que de la fenêtre déjà générée par QtCreator à la création d'un projet graphique.
    Je regarde comment est fait la première fenêtre et ne voit pas comment allouer de l'espace mémoire à ma seconde. AI-je besoin de faire appel à la méthode "setupUi" avec cette seconde fenêtre ? Est-ce que l'ajout de "dial(new Ui::DialText)" dans le constructeur devrait suffire ?
    Ayant bien ma seconde fenêtre qui s'affiche lorsque j'enlève "dial->textEdit->setText(text);" je pensais que la mémoire pour ma fenêtre était déjà alloué.

    Désolé pour toutes ces questions "de bases" finalement.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Mise à jour:

    Je suis passer directement par une méthode "afficherText(QString text)" dans dialtext.cpp que j'appelle dans ma méthode showFile.

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

Discussions similaires

  1. [c#] utiliser deux méthodes différentes ayant le même nom!
    Par Cédric B. dans le forum Services Web
    Réponses: 6
    Dernier message: 28/04/2011, 08h51
  2. Utiliser deux dll différentes dans une page aspx
    Par Sylvain_57 dans le forum Développement Sharepoint
    Réponses: 3
    Dernier message: 21/03/2011, 12h31
  3. Réponses: 3
    Dernier message: 15/02/2011, 14h55
  4. Réponses: 6
    Dernier message: 16/08/2010, 17h42
  5. Maitre-détail sur deux fenêtres différentes
    Par titourock dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 24/05/2010, 10h03

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