Problèmes avec Qt

Résolu/Fermé
leberra Messages postés 27 Date d'inscription vendredi 30 mai 2014 Statut Membre Dernière intervention 25 décembre 2015 - 5 juin 2014 à 23:22
leberra Messages postés 27 Date d'inscription vendredi 30 mai 2014 Statut Membre Dernière intervention 25 décembre 2015 - 6 juin 2014 à 20:30
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 vendredi 30 mai 2014 Statut Membre Dernière intervention 25 décembre 2015 1
5 juin 2014 à 23:23
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 vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
6 juin 2014 à 11:18
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 vendredi 30 mai 2014 Statut Membre Dernière intervention 25 décembre 2015 1
6 juin 2014 à 20:30
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