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 -
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?
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:
- Problèmes avec Qt
- Qt sdk - Télécharger - Langages
- Qt web - Télécharger - Navigateurs
- Qt tab bar - Télécharger - Personnalisation
- ComboBox en C++ avec Qt - Forum C++
- Qt linux ✓ - Forum Ubuntu
2 réponses
j'ai oublié de préciser que la fonction main() est simple : création d'un objet "fenetre" et son affichage
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
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
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
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 peut tu me dire pourquoi il y'a un ?
à bientôt