[gelöst] QFile, QFileDialog, QDataStream

Du bist neu in der Welt von C++? Dann schau hier herein!
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

[gelöst] QFile, QFileDialog, QDataStream

Beitrag von nici »

Hallo,

ich muss von einer Datei Werte einlesen und ein Array der Werte zurückgeben. Wenn ich einen PushButton drücke, soll sich ein Fenster öffnen von dem ich eine Datei auswählen kann,aber es soll nur der Pfad der Datei zurückgegeben werden und nicht die Datei öffnen.
Ich weiss nur dass ich mit QFile, QFileDialog und QDataStram arbeiten muss.
Ich habe mir viele Beispiele angeguck, doch ich werde nicht schlau daraus, weil es jedes mal anders gemacht wird.

Kann mir jemand einen Ansat geben. Danke.

lg

nici
Zuletzt geändert von nici am 28. November 2008 09:58, insgesamt 1-mal geändert.
Hmm mir fällt nichts ein ^^
jerry42
Beiträge: 126
Registriert: 9. Oktober 2008 10:48

Beitrag von jerry42 »

also anfangen würde ich mit einem Button den du mit einer Methode connectest.
in der Methode nimmst du dann einen QFileDialog zur Hand.

zum Beispiel so

Code: Alles auswählen

  QString dateipfad ( QFileDialog::getOpenFileName( this ) );
Danach musst du dann entsprechend die Datei öffnen und auslesen. Wobei dir da die beiden anderen Klassen wohl weiterhelfen werden.

Gruß jerry42
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

hi,

ok ich probiers mal, dannkkee.

lg

nici
Hmm mir fällt nichts ein ^^
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

hallo,

also ich habe ein Widget mit nur einem einzigen Button erstellt. Der Button heisst loadFile. Jetzt will ich wenn ich den Button drücke, dass ich ein Fenster öffnet aus dem ich eine Datei auswählen kann, und mir dann der Pfad der Datei angezeigt wird.

Bis jetzt habe ich:

File.cpp

Code: Alles auswählen

#include "File.h"


File::File(QWidget *parent) 
		:QWidget(parent)
	{
		setupUi(this);
	
		connect(loadFile, SIGNAL(clicked()),
                  this,  SLOT(openWindow()));	
    
		QStirng wayToData(QFieDialog::getOpenFileName(this));
	}
void File::loadFile(){
	
	QString filename=QFileDialog::getOpenFileName(this);
	QFile file(filename);
	if(file.open(QIODevice::ReadOnly | QIODevice::Text)){
		pushButton->setPlainText(QString::fromUtf8(file.readAll()));
		mFilePath=filename;
		statusBar()->schowMessage(tr"(Datei erfolgreich geladen"),3000);
	}
	
}

void File::saveFile(const QString &name){
	QFile file(name);
	if(file.open(QIODevice::WriteOnly|QIODevice::Text)){
		file.write(textEdit->toPlainText().toUtf8());
		statusBar()->showMessage(tr("Datei erfolgreich gespeichert"),3000);
	}
}

void File::saveFileAs() {
	mFilePath=QFileDialog::getSaveFileName(this);
	if(mFilePath.isEmpty())
		return;
	saveFile(mFilePath);
}
und

File.h

Code: Alles auswählen

#ifndef FILE_H
#define FILE_H

#include "ui_File.h"

class File : public QWidget , private Ui::File
{
	Q_OBJECT
	
	public:
		File(QWidget *parent=0);
		
		
	public slots:
			void openWindow();
			
		};
#endif
so und jetzt weiss ich erstens nicht ob das was ich da gecoded habe ganz richtig ist oder nicht, und zweitens weiss ich nicht wie ich weiter machen soll.

lg

nici
Hmm mir fällt nichts ein ^^
jerry42
Beiträge: 126
Registriert: 9. Oktober 2008 10:48

Beitrag von jerry42 »

also ich weiß auch nicht, ob dass was du geschrieben hast richtig ist.
Vom Ansatz sieht es doch gar nicht schlecht aus.
Wie wärs du kompilierst es einfach, und schaust ob gemeckert wird?
Und wenn Fehler kommen die du nicht verstehst, dann kannst du sie ja hier posten. :)
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

was ist denn dein Button und wo ist die Funktion OpenWindow???
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

das openWindow muss loadFile heissen ^^

ohh man, es kommen voll viele Fehler, arg.
Hmm mir fällt nichts ein ^^
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

ok ich hatte ein paar Schreibfehler, hab die Korrigiert und die Fehler sind weniger geworden.

hier noch mal die File.cpp

Code: Alles auswählen

#include <QFile>
#include <QString>
#include <QIODevice>
#include <QFileDialog>

#include "File.h"


File::File(QWidget *parent) 
		:QWidget(parent)
	{
		setupUi(this);
	
		connect(loadFile, SIGNAL(clicked()),
                  this,  SLOT(loadFile()));	
    
		QString wayToData(QFileDialog::getOpenFileName(this));
	}
void File::loadFile(){
	
	QString filename=QFileDialog::getOpenFileName(this);
	QFile file(filename);
	if(file.open(QIODevice::ReadOnly | QIODevice::Text)){
		pushButton->setPlainText(QString::fromUtf8(file.readAll()));
		mFilePath=filename;
		statusBar()->schowMessage(tr"(Datei erfolgreich geladen"),3000);
	}	
}
void File::saveFile(const QString &name){
	QFile file(name);
	if(file.open(QIODevice::WriteOnly|QIODevice::Text)){
		file.write(textEdit->toPlainText().toUtf8());
		statusBar()->showMessage(tr("Datei erfolgreich gespeichert"),3000);
	}
}
void File::saveFileAs() {
	mFilePath=QFileDialog::getSaveFileName(this);
	if(mFilePath.isEmpty())
		return;
	saveFile(mFilePath);
}
und hier die Fehlermeldungen:

g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o File.o File.cpp
In file included from File.cpp:6:
File.h:4:21: error: ui_File.h: Datei oder Verzeichnis nicht gefunden
File.h:6: error: 'Ui' has not been declared
File.h:6: error: expected `{' before 'File'
File.h:6: error: invalid function declaration
File.cpp:9: error: invalid use of undefined type 'class File'
File.h:6: error: forward declaration of 'class File'
File.cpp: In constructor 'File::File(QWidget*)':
File.cpp:12: error: 'setupUi' was not declared in this scope
File.cpp:14: error: 'loadFile' was not declared in this scope
File.cpp:17: error: invalid conversion from 'File* const' to 'QWidget*'
File.cpp:17: error: initializing argument 1 of 'static QString QFileDialog::getOpenFileName(QWidget*, const QString&, const QString&, const QString&, QString*, QFlags<QFileDialog::Option>)'
File.cpp:17: confused by earlier errors, bailing out
make: *** [File.o] Fehler 1


lg

nici
Hmm mir fällt nichts ein ^^
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

also das meiste hab ich von meinem Buch und ob ich diese statusBar wirklich brauche weiss ich nicht und wenn ja wozu? Hmm wäre für ne kleine Hilfe dankbar :-)

lg

nici
Hmm mir fällt nichts ein ^^
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

ähm will mir keiner helfen oder kann mir keiner helfen?? :-)

lg

nici
Hmm mir fällt nichts ein ^^
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

File.h:4:21: error: ui_File.h: Datei oder Verzeichnis nicht gefunden
Was sollen wir denn dazu schreiben? Wir erwarten, dass du dir (nicht uns!) Fragen stellst wie "wo liegt denn diese Datei?", falls nicht auffindbar "welche Quelle hat die Datei "ui_File.h (z.B. UI-Ressourcen?)" und falls aus der Quelle (z.B. "File.ui") diese Header-Datei _nicht_ generiert wird "wie generiert man aus ui-Dateien Header-Dateien?"... und danach in die Doku schaust.... Falls dann was nicht klar ist, erwarten wir konkrete Fragen mit dem Hinweis, was du bereits versucht hast.
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

hmm den Fehler mit der ui-Datei hab ich behoben. Jetzt tauchen aber andere Fehler auf. Warum wird gesagt, dass statusBar nicht deklariert ist?

Code: Alles auswählen

#include <QFile>
#include <QString>
#include <QIODevice>
#include <QFileDialog>

#include "File.h"


File::File(QWidget *parent)
      :QWidget(parent)
   {
      setupUi(this);
   
      connect(loadFile, SIGNAL(clicked()),
                  this,  SLOT(loadFile()));   
   
      QString wayToData(QFileDialog::getOpenFileName(this));
   }
void File::loadFile(){
   
   QString filename=QFileDialog::getOpenFileName(this);
   QFile file(filename);
   if(file.open(QIODevice::ReadOnly | QIODevice::Text)){
      loadFile->setPlainText(QString::fromUtf8(file.readAll()));
      mFilePath=filename;
    statusBar()->schowMessage(tr"(Datei erfolgreich geladen"),3000);
   }   
}
void File::saveFile(const QString &name){
   QFile file(name);
   if(file.open(QIODevice::WriteOnly|QIODevice::Text)){
      file.write(textEdit->toPlainText().toUtf8());
      statusBar()->showMessage(tr("Datei erfolgreich gespeichert"),3000);
   }
}
void File::saveFileAs() {
   mFilePath=QFileDialog::getSaveFileName(this);
   if(mFilePath.isEmpty())
      return;
   saveFile(mFilePath);
}
lg

nici
Hmm mir fällt nichts ein ^^
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Warum wird gesagt, dass statusBar nicht deklariert ist?
Deine Klasse "File" (was übrigens ein extrem schlechter Name für eine GUI-Klasse ist) ist ein QWidget.. gehe also nach http://doc.trolltech.com/4.4/qwidget-members.html und suche nach "statusBar" ... so.. hat der Compiler nun recht oder nicht?
jerry42
Beiträge: 126
Registriert: 9. Oktober 2008 10:48

Beitrag von jerry42 »

vermutilch liegt es einfach daran, dass ein QWidget keine Statusbar hat.
Somit existiert auch keine "statusBar()" Methode.

Nur ein QMainWindow besitzt eine Statusbar.

Gruß jerry42
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

hi,

was könnte ich denn anstelle von statusBar denn nehmen ?

lg

nici
Hmm mir fällt nichts ein ^^
Antworten