Problèmes avec Qt

Résolu
leberra Messages postés 27 Date d'inscription   Statut Membre Dernière intervention   -  
leberra Messages postés 27 Date d'inscription   Statut Membre Dernière intervention   -
je n'arrive pas à écrire dans un fichier texte avec Qt.

voici le code que j'utilise :

#include "Fenetre.h"
#include <QTextStream>

fenetre::fenetre() : QWidget()
{
int reponse = QMessageBox::question(this, "playlist", "créer une playlist ?", QMessageBox::Yes | QMessageBox::No);
if (reponse != QMessageBox::Yes)
{
delete this;
}
setFixedSize(300,150);
m_Parcourir = new QPushButton("Parcourir", this);
m_Parcourir->move(10,100);
m_Parcourir->setCursor(Qt::PointingHandCursor);
m_Parcourir->setToolTip("selectionner un fichier");
m_valider = new QPushButton("valider", this);
m_valider->move(110,100);
m_valider->setCursor(Qt::PointingHandCursor);
m_annuler = new QPushButton("annuler", this);
m_annuler->move(210,100);
m_annuler->setCursor(Qt::PointingHandCursor);
QObject::connect(m_Parcourir, SIGNAL(clicked()), this, SLOT(parcourir()));
QObject::connect(m_valider, SIGNAL(clicked()), this, SLOT(valider()));
QObject::connect(m_annuler, SIGNAL(clicked()), this, SLOT(annuler()));
QObject::connect(this, SIGNAL(boutonRetourne(QString)), this, SLOT(sauvegarder(QString)));
QObject::connect(this, SIGNAL(quitter()), qApp, SLOT(quit()));
QFile fichier("playlist.txt");
fichier.open(QIODevice::WriteOnly);
sauvegarde.setDevice(&fichier);
}
void fenetre::parcourir()
{
QString fichier = QFileDialog::getOpenFileName(this, "Ouvrir un fichier", QString(), "audio (*.mp3; *.snd; *.wav; *.au; *.aif; *.aifc; *.aiff; *.wma)");
if (fichier != "")
{
emit boutonRetourne(fichier);
}
}
void fenetre::sauvegarder(QString fichier)
{
sauvegarde << fichier << endl;
}
void fenetre::valider()
{

}
void fenetre::annuler()
{
fichier.flush();
fichier.close();
this->hide();
emit quitter();
}

avec l'en-tête qui va avec :

#ifndef FENETRE_H
#define FENETRE_H

#include <QApplication>
#include <QPushButton>
#include <QMessageBox>
#include <QWidget>
#include <QInputDialog>
#include <QString>
#include <Qfile>
#include <QTextStream>
#include <QFileDialog>
#include "accueil.h"

class fenetre : public QWidget
{
Q_OBJECT

public :
fenetre();

public slots:
void parcourir();
void sauvegarder(QString fichier);
void valider();
void annuler();

signals:
void boutonRetourne(QString fichier);
void quitter();

private :
QPushButton *m_Parcourir;
QPushButton *m_valider;
QPushButton *m_annuler;
QFile fichier;
QTextStream sauvegarde;
};

#endif // FENETRE_H

accueil est une classe vide

Quelqu'un peut me dire ce qui cloche, et pourquoi le compilateur renvoie : QIODevice::write: device not open
QFileDevice::flush: No file engine. Is IODevice open?
A voir également:

2 réponses

leberra Messages postés 27 Date d'inscription   Statut Membre Dernière intervention   1
 
j'ai oublié de préciser que la fonction main() est simple : création d'un objet "fenetre" et son affichage
0
sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   49
 
bonjour
il est préférable de mettre ton code source dans des balises mise à ta disposition.
j'ai remarquer pas mal d'erreur dans ton code à commencer par la
QDialog
peut tu me dire pourquoi il y'a un
 delete this 
?
à bientôt
0
leberra Messages postés 27 Date d'inscription   Statut Membre Dernière intervention   1
 
c'était pour fermer la fenetre

j'ai finalement trouvé la réponse : je ne passais pas par l'attribut QFile de ma classe, résultat : la variable Qfile du constructeur n'existait plus pour les autres méthodes et quand je voulais recréer le flux "sauvegarde", je ne pouvais pas le récupérer

désolé pour les balises, je sais pas bien les utiliser

voici le code du fichier cpp de ma classe

#include "Fenetre.h"
#include <QTextStream>

fenetre::fenetre() : QWidget()
{
    int reponse = QMessageBox::question(this, "playlist", "créer une playlist ?", QMessageBox::Yes | QMessageBox::No);
    m_extentions = "audio (*.mp3; *.snd; *.wav; *.au; *.aif; *.aifc; *.aiff; *.wma)";
    if (reponse != QMessageBox::Yes)
    {
        m_extentions = "texte (*.txt)";
    }
    setFixedSize(300,150);
    m_Parcourir = new QPushButton("Parcourir", this);
    m_Parcourir->move(10,120);
    m_Parcourir->setCursor(Qt::PointingHandCursor);
    m_Parcourir->setToolTip("selectionner un fichier");
    m_valider = new QPushButton("valider", this);
    m_valider->move(110,120);
    m_valider->setCursor(Qt::PointingHandCursor);
    m_annuler = new QPushButton("annuler", this);
    m_annuler->move(210,120);
    m_annuler->setCursor(Qt::PointingHandCursor);
    QObject::connect(m_Parcourir, SIGNAL(clicked()), this, SLOT(parcourir()));
    QObject::connect(m_valider, SIGNAL(clicked()), this, SLOT(valider()));
    QObject::connect(m_annuler, SIGNAL(clicked()), this, SLOT(annuler()));
    QObject::connect(this, SIGNAL(boutonRetourne(QString)), this, SLOT(sauvegarder(QString)));
    QObject::connect(this, SIGNAL(quitter()), qApp, SLOT(quit()));
    m_fichier.setFileName("playlist.exe");
    m_fichier.open(QIODevice::WriteOnly);
    sauvegarde.setDevice(&m_fichier);
    m_fichiersAffiche = new QLabel(this);
    m_fichiersAffiche->setText("playlist :<p>");
    m_fichiersAffiche->setGeometry(10,10,290,m_fichiersAffiche->height());
}
void fenetre::parcourir()
{
    QString fichier = QFileDialog::getOpenFileName(this, "Ouvrir un fichier", QString(), m_extentions);
    if (fichier != "")
    {
        emit boutonRetourne(fichier);
    }
}
void fenetre::sauvegarder(QString fichier)
{
    if (m_extentions == "audio (*.mp3; *.snd; *.wav; *.au; *.aif; *.aifc; *.aiff; *.wma)" || (m_extentions == "texte (*.txt)" && m_fichiersAffiche->text() == "playlist :<p>"))
    {
        QString texteAffiche(m_fichiersAffiche->text()+"  "+fichier+"<p>");
        m_fichiersAffiche->setText(texteAffiche);
        m_fichiersAffiche->adjustSize();
        int largeur = 300;
        if (m_fichiersAffiche->width()>300)
        {
            largeur = m_fichiersAffiche->width()+15;
        }
        int hauteur = 150;
        if (m_fichiersAffiche->height()>120)
        {
            hauteur = m_fichiersAffiche->height()+30;
            m_Parcourir->move(10, hauteur-30);
            m_valider->move(110, hauteur-30);
            m_annuler->move(210, hauteur-30);
        }
        setFixedSize(largeur, hauteur);
        QMessageBox::information(this, "fichier ouvert", texteAffiche);
    }
    else
    {
        QString texteAffiche("playlist :<p>  "+fichier);
        QMessageBox::information(this, "fichier ouvert", texteAffiche);
        m_fichiersAffiche->setText(texteAffiche);
        m_fichiersAffiche->adjustSize();
        this->adjustSize();
    }
}
void fenetre::valider()
{
    QString fichier(m_fichiersAffiche->text());
    if (m_extentions == "audio (*.mp3; *.snd; *.wav; *.au; *.aif; *.aifc; *.aiff; *.wma)")
    {
        sauvegarde.setDevice(&m_fichier);
        sauvegarde << fichier << endl;
    }
}
void fenetre::annuler()
{
    m_fichier.close();
    this->hide();
    emit quitter();
}


comme tu le vois, j'ai pas mal avancé et me casse maintenant les dents sur deux autres problèmes : sauvegarder la liste (faite dans la variable "m_fichiersAffiche") dans un fichier texte et ouvrir une autre Widget personnalisée

je suis toujours ouvert pour les suggestions et merci de ton aide
0