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

Discussion :

QMdi et ouverture de fichiers

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Par défaut QMdi et ouverture de fichiers
    Hello !!!
    Excusez-moi de vous déranger, j'avais une petite question.
    Voilà, j'essaie de créer une fenêtre qui contienne plusieurs sous-fenêtres (avec la commande QMdi) ayant la propriété de QWidget.
    Le problème est que je n’arrive pas à afficher dans ces sous-fenêtres plus de un bouton.
    Comment faire pour en ajouter un deuxième*(ou d’autres choses) ?

    Voilà mon code :

    Fenetre.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
    #ifndef MAFENETRE_H
    #define MAFENETRE_H
    #include <QApplication>
    #include <QWidget>
    #include <QPushButton>
    #include <QTextEdit>
    #include <QFile>
    #include <QString>
    #include <QTextStream>
    #include <QFileDialog>
    #include <QtGui>
    class MaFenetre : public QMainWindow
    {
     
    public :
        MaFenetre();
    };
    #endif // MAFENETRE_H


    Fenetre.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include "MaFenetre.h"
    MaFenetre::MaFenetre()
    {
        setFixedSize(500, 350);
        QMdiArea *zoneCentrale = new QMdiArea;
     
        QPushButton *Open = new QPushButton (“ouvrir”, this);
     
        QMdiSubWindow *sousFenetre1 = zoneCentrale->addSubWindow(Open);
     
        setCentralWidget(zoneCentrale);
    }




    main.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
    #include <QApplication>
    #include <QTextEdit>   
    #include <QFile>       
    #include <QString>     
    #include <QTextStream>
    #include <QtGui>
    #include "MaFenetre.h"
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        MaFenetre fenetre;
        fenetre.show();
        return app.exec();
    }

    En plus j’aimerais beaucoup réussir à ouvrir un fichier en .txt dans l’une de ces sous-fenêtres. Et j’ai un peu de difficultés pour y arriver.
    Voilà mes modifications de la page MaFenetre.cpp :


    Fenetre.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
    #include "MaFenetre.h"
    MaFenetre::MaFenetre()
    {
        setFixedSize(500, 350);
        QMdiArea *zoneCentrale = new QMdiArea;
     
        QPushButton *Open = new QPushButton (“ouvrir”, this);
     
        QMdiSubWindow *sousFenetre1 = zoneCentrale->addSubWindow(Open);
     
    QObject::connect(Open, SIGNAL(clicked()), &sousFenetre1, SLOT(ouvrirFichier()));
     
     
        setCentralWidget(zoneCentrale);
    }
     
     
    void MaFenetre :: ouvrirFichier()
    {
     
    f = new QFile("donnees.txt");
    f.open(QIODevice::Text | QIODevice::ReadOnly);
    contenu = new QString(f.readAll());
    f.close();
    }
    Et de MaFenetre.h

    MaFenetre.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
    #ifndef MAFENETRE_H
    #define MAFENETRE_H
    #include <QApplication>
    #include <QWidget>
    #include <QPushButton>
    #include <QTextEdit>
    #include <QFile>
    #include <QString>
    #include <QTextStream>
    #include <QFileDialog>
    #include <QtGui>
    class MaFenetre : public QMainWindow
    {
     
    public :
        MaFenetre();
    Public slots :
    void ouvrirFichier();
    private :
    std::string contenu;
    QFile f;
    };
    #endif // MAFENETRE_H

    Mais ça ne marche malheureusement pas. Donc si quelqu'un sait comment faire, ça m'intéresse beaucoup.
    Merci d'avance !!!

  2. #2
    Membre émérite
    Avatar de mitkl
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 364
    Par défaut
    Salut,

    pour afficher plus d'un élement par fenêtre MDI, il faut que tu passes non pas un seul widget (comme un QPushButton comme tu le fais actuellement) à la fonction zoneCentrale->addSubWindow() mais un QWidget* qui lui même va contenir plusieurs widgets, c'est un principe de base de Qt, un widget peut en contenir d'autres.

    De façon schématique, ça donnerait quelque chose comme ça

    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
    #include "MaFenetre.h"
    MaFenetre::MaFenetre()
    {
    setFixedSize(500, 350);
    QMdiArea *zoneCentrale = new QMdiArea;
     
    QWidget* monContenu ...
     
    QPushButton *Open = new QPushButton (“ouvrir”, this);
    open->move...
    QPushButton *Open2 = new QPushButton (“ouvrir”, this);
    Open2->move...
     
    monContenu->addWidget(open);
    monContenu->addWidget(open2);
     
     
    QMdiSubWindow *sousFenetre1 = zoneCentrale->addSubWindow(monContenu);
     
    setCentralWidget(zoneCentrale);
    }
    Après dans ton QWidget* que j'ai nommé monContenu, rien ne t'empêche de déclarer un Layout à l'intérieur pour mieux organiser tes widgets, bref, tu es libre.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Par défaut
    Salut !

    Alors déjà merci beaucoup pour ta réponse...
    Je viens d'essayer ton truc, mais le problème est que le PC me répond que "addWidget isn't a member of QWidget".
    Sais tu ce qui bloque ?

    Voilà le code modifié :


    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
    #include "MaFenetre.h"
    MaFenetre::MaFenetre()
    {
    setFixedSize(500, 350);
    QMdiArea *zoneCentrale = new QMdiArea;
    QWidget* monContenu;
     
    QPushButton *Open = new QPushButton ("ouvrir", this);
    QPushButton *Open2 = new QPushButton ("ouvrir", this);
     
    monContenu->addWidget(Open);
    monContenu->addWidget(Open2);
     
     
    QMdiSubWindow *sousFenetre1 = zoneCentrale->addSubWindow(monContenu);
     
    setCentralWidget(zoneCentrale);
    }
    En tout cas merci beaucoup !!!

  4. #4
    Membre émérite
    Avatar de mitkl
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 364
    Par défaut
    Oui, désolé, au début j'étais parti sur un exemple avec un Layout avant de changer.


    Pour donner à un widget son parent, il faut faire tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QPushButton *Open = new QPushButton ("ouvrir", monContenu);

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Par défaut
    salut !!

    merci beaucoup, ça marche !!

    et alors j'avais juste une dernière petite question qui est sans doute débile : je n'arrive pas à ouvrir un fichier à partir du void de mon code écrit plus haut.
    Je te réécris juste le passage mentionné :

    (MaFenetre.cpp)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    QObject::connect(Open, SIGNAL(clicked()), &sousFenetre1, SLOT(ouvrirFichier()));
     
     
     
    void MaFenetre :: ouvrirFichier()
    {
     
    f = new QFile("donnees.txt");
    f.open(QIODevice::Text | QIODevice::ReadOnly);
    contenu = new QString(f.readAll());
    f.close();
    }
    Sais tu ce qui cloche ?
    Merci beaucoup !!!

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    149
    Par défaut
    Bonjour,

    La moindre des choses est de vérifier si le fichier est correctement ouvert. En effet, la fonction open retourne un booléan, pour indiquer si le fichier est correctement ouvert.
    De plus, par précaution, je placerai un breakpoint (point d'arrêt) dans le slot, pour savoir s'il est bel et bien exécuté.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre émérite
    Avatar de mitkl
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 364
    Par défaut
    Mis à part ce que LittleWhite te recommande, je te conseille de faire attention à la cohérence des types de tes attributes, tu déclares par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::string contenu;
    QFile f;
    puis dans ta méthode tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    contenu = new QString(f.readAll());
    2 problèmes ici : tu alloues un QString pour l'assigner à un std::string.
    Pour corriger le problème, je te conseille de déclarer de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    dans la classe : 
     
    QString contenu;
     
    dans la méthode :
     
    contenu = QString(f.readAll());
     
    ou si tu tiens absolument à un std::string tu peux toujours utiliser QString::toStdString();
     
    std::string contenu;
     
    contenu = QString(f.readAll()).toStdString();

    Même chose pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f = new QFile("donnees.txt");
    supprime tout simplement le new (actuellement tu passes un QFile* à un QFile) et ça devrait être bon

Discussions similaires

  1. ouverture de fichier txt
    Par juguul dans le forum MFC
    Réponses: 11
    Dernier message: 18/12/2003, 09h44
  2. Ouverture de fichier en api
    Par Michaël dans le forum Windows
    Réponses: 9
    Dernier message: 10/12/2003, 16h47
  3. Ouverture de fichier
    Par Ricou.13 dans le forum VBA Access
    Réponses: 3
    Dernier message: 07/10/2003, 08h59
  4. Réponses: 2
    Dernier message: 26/02/2003, 15h18
  5. [VBA-E] Evenement ouverture de fichier
    Par gjeff dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/12/2002, 09h42

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