[gelöst] QFile Variable global machen??

Alles rund um die Programmierung mit Qt
Antworten
Timebeast
Beiträge: 22
Registriert: 21. August 2007 21:48
Wohnort: Hann.-Münden

[gelöst] QFile Variable global machen??

Beitrag von Timebeast »

Moin,
ich hab gerad das Problem das ich mit einem QFileDialog eine Datei öffne, klappt auch wunderbar,
allerdings will ich auf diese Datei nun in anderen Proceduren zugreifen können. Bsp.:
.h Datei:
#include <QtGui/QMainWindow>
#include <QFileDialog>
#include <QTextStream>

class ComPort : public QMainWindow
{
Q_OBJECT

public:
ComPort(QWidget *parent = 0);
virtual ~ComPort();

private:
Ui::ComPortClass ui;
QTextStream in;
QFile file;

private slots:
void on_dateiladenButton_clicked();
void on_dateischliessenButton_clicked();
void on_sortierenButton_clicked();
};
#endif

.cpp:
void ComPort::on_dateiladenButton_clicked()
{
QString fn = QFileDialog::getOpenFileName(this, QString::null, QString::null);

file(fn); // <--GEHT NICHT "no match for call to `(QFile) (QString&)'"
QTextStream in(&file); // <--QTextStream muß davor stehen, obwohl im Header definiert
}

So, wenn ich nun in der .cpp Datei nun "QFile file(fn)" angebe, geht es.

"in" ist ja in der Header Datei auch global definiert, wenn ich dann jedoch unter void on_sortierenButton_clicked(); darauf zugreifen will, zuerst in.seek(0); danach mit in>>zeichen, findet er kein Zeichen.

Geht das nur mit Pointern? Was mach ich falsch? Wenn ich z.B. in der Header Datei ein int definiere kann ich ohne neu definition in jeder Procedur dieses int nutzen und Werte somit von Procedur zu Procedur übergeben, warum geht das nicht mit QFile?

Puh, viel geschrieben, ich hoffe es wird verständlich wo mein Problem liegt...

Gruß
Ralf
Zuletzt geändert von Timebeast am 25. August 2007 22:39, insgesamt 1-mal geändert.
Andy
Beiträge: 16
Registriert: 16. Juni 2007 00:39

Beitrag von Andy »

Hi!
Du kannst das über nen Pointer machen,
also quasi so:

headerdatei

Code: Alles auswählen


class ComPort : public QMainWindow {
.
.
.
     QFile* file;

.
.
};
sourcefile

Code: Alles auswählen

ComPort::ComPort(QWidget* parent){
     QMainWindow(parent);
     file=newQFile(this);
}
und uzugreifen auf die Member-Methoden kannst du dann über "file->".
RD1978
Beiträge: 84
Registriert: 5. Juni 2007 08:00
Wohnort: Stralsund (DDR)

Beitrag von RD1978 »

Hallo,

wie wär´ s mit:

Code: Alles auswählen

file.setFileName( fn );
in.setDevice( &file );
MfG RD1978
Timebeast
Beiträge: 22
Registriert: 21. August 2007 21:48
Wohnort: Hann.-Münden

Beitrag von Timebeast »

@Andy:
Danke für die Antwort, genau, aber mit der Äusserung meinerseits "Geht das nur mit Pointern?" wollte ich nicht zum Ausdruck bringen das ich das mit Pointern nicht hinbekommen hätte, sonder das mir wohl bewusst ist das es damit geht... :D trotzdem Danke für den Versuch

@RD1078:
Jawoll ja, genau das war die Antwort die ich brauchte, funktioniert bestens, vielen vielen Dank!!!
RD1978
Beiträge: 84
Registriert: 5. Juni 2007 08:00
Wohnort: Stralsund (DDR)

Beitrag von RD1978 »

Geht das nur mit Pointern? Was mach ich falsch? Wenn ich z.B. in der Header Datei ein int definiere kann ich ohne neu definition in jeder Procedur dieses int nutzen und Werte somit von Procedur zu Procedur übergeben, warum geht das nicht mit QFile?
Weil int, double usw. primitive Datentypen sind, die nur einen Wert aufnehmen und QFile eine Klasse ist. Wenn Du in der .h ein QFile Objekt anlegst, kannst Du den Konstuktor nicht mehr aufrufen, es sei denn es ist ein Pointer.

MfG RD1978
Timebeast
Beiträge: 22
Registriert: 21. August 2007 21:48
Wohnort: Hann.-Münden

Beitrag von Timebeast »

oh man, danke RD1978! Primitive Datentypen, stimmt hat mein damaliger Dozent auch schon was von erzählt :roll: aber wie´s halt so ist :wink: lang lang ist´s her...
Antworten