QString in Datei speichern

Alles rund um die Programmierung mit Qt
Antworten
doubleB
Beiträge: 11
Registriert: 16. Juli 2007 15:53

QString in Datei speichern

Beitrag von doubleB »

Hallo,

Ich habe ein paar QStrings (a="Vorname", b="Nachname, c="Wohnort").
Diese möchte ich jetzt in eine Datei speichern,einfach hintereinanderweg...

Wie mach ich das. Muss ich QString dazu in char[] umwandeln oder gehts auch "direkt"?

MfG
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Hast du dir schon die Dokumentation von QFile inklusive der enthaltenen Beispiele angeschaut, oder sollen wir diese hier noch mal reinposten?
NoobSaibot
Beiträge: 99
Registriert: 27. Januar 2005 15:55

Beitrag von NoobSaibot »

hier schon nachgeschaut? ich weiß nicht was man da noch besser machen könnte.
doubleB
Beiträge: 11
Registriert: 16. Juli 2007 15:53

Beitrag von doubleB »

ah, ok sorry, habs jetzt hinbekommen,

Habe jetzt einen slot definiert,allerdings kommt beim Aufruf desProgramms nach dem Kompilieren diese Meldung:

Object::connect: No such slot QWidget::saveData()

Was könnte ich da falsch gemacht haben?

Slot:

Code: Alles auswählen

public slots: //SLOTS
	void saveData();

Aufruf:

Code: Alles auswählen

connect(ok,SIGNAL(clicked()),this,SLOT(saveData()));
Gruß[/code]
NoobSaibot
Beiträge: 99
Registriert: 27. Januar 2005 15:55

Beitrag von NoobSaibot »

du könntest vergessen haben Q_OBJECT in die Klasse einzufügen.
doubleB
Beiträge: 11
Registriert: 16. Juli 2007 15:53

Beitrag von doubleB »

Danke, das habe ich allerdings vergessen :-)

Aber nun bekomme ich nach dem Ausführen von qmake -project und qmake, beim aufrufen von make folgende Meldung:

Code: Alles auswählen

g++  -o qttut5 main.o moc_inputwidget.o    -L/usr/lib -lQtGui -lQtCore -lpthread
moc_inputwidget.o: In function `InputWidget::InputWidget(QWidget*)':
moc_inputwidget.cpp:(.text+0x80): multiple definition of `InputWidget::InputWidget(QWidget*)'
main.o:main.cpp:(.text+0x0): first defined here
moc_inputwidget.o: In function `InputWidget::InputWidget(QWidget*)':
moc_inputwidget.cpp:(.text+0xc60): multiple definition of `InputWidget::InputWidget(QWidget*)'
main.o:main.cpp:(.text+0xd00): first defined here
moc_inputwidget.o: In function `InputWidget::saveData()':
moc_inputwidget.cpp:(.text+0x1840): multiple definition of `InputWidget::saveData()'
main.o:main.cpp:(.text+0x18e0): first defined here
collect2: ld gab 1 als Ende-Status zurück
make: *** [qttut5] Fehler 1
Das versteht ich nicht. Welche Ursache hat das?

Die Klassendefinition befindet sich in inputwidget.h und das "Hauptprogramm" in main.cpp.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Du inkludierst moc_inputwidget.cpp in main.cpp was falsch ist.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
doubleB
Beiträge: 11
Registriert: 16. Juli 2007 15:53

Beitrag von doubleB »

So sieht main.cpp aus:

Code: Alles auswählen

#include <QApplication>
#include "inputwidget.h"

int main(int argc,char *argv[])
{
	
	QApplication app(argc,argv);
	//----------------Fenster---------------
	InputWidget input; //Widget anlegen
	input.show(); //Widget anzeigen	
	
	return app.exec(); 
}
Aber hier muss ich inputwidget.h doch inkludieren, sonst kann ich doch kein Widget von InputWidget anlegen.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ok, Du hast die Implementation deiner Klassenfunktionen im Header. Das geht nicht (so ohne weiteres)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
doubleB
Beiträge: 11
Registriert: 16. Juli 2007 15:53

Beitrag von doubleB »

Okay und wo soll ich die sonst unterbringen? In einer 2. cpp-Datei?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

doubleB hat geschrieben:In einer 2. cpp-Datei?
Nunja, normalerweise wird das so gemacht, ja.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
doubleB
Beiträge: 11
Registriert: 16. Juli 2007 15:53

Beitrag von doubleB »

Nunja, dann bekomme ich beim Kompilieren wieder einen Haufen Meldungen. Das kann nicht sein, meine Dateien haben exakt den gleichen Aufbau wie die der Tutorials.

Code: Alles auswählen

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 main.o main.cpp
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 inputwidget.o inputwidget.cpp
inputwidget.cpp:7: Fehler: »InputWidget« wurde nicht deklariert
inputwidget.cpp:7: Fehler: ISO-C++ verbietet Deklaration von »InputWidget« ohne Typ
inputwidget.cpp: In function »int InputWidget(QWidget*)«:
inputwidget.cpp:7: Fehler: nur Konstruktoren nehmen Basisinitialisierungen
inputwidget.cpp:10: Fehler: »setFixedSize« wurde in diesem Gültigkeitsbereich nicht definiert
inputwidget.cpp:11: Fehler: »setWindowTitle« wurde in diesem Gültigkeitsbereich nicht definiert
inputwidget.cpp:15: Fehler: ungültige Verwendung von »this« in Nicht-Element-Funktion
inputwidget.cpp:17: Fehler: ungültige Verwendung von »this« in Nicht-Element-Funktion
inputwidget.cpp:19: Fehler: ungültige Verwendung von »this« in Nicht-Element-Funktion
inputwidget.cpp:21: Fehler: ungültige Verwendung von »this« in Nicht-Element-Funktion
inputwidget.cpp:26: Fehler: »tr« wurde in diesem Gültigkeitsbereich nicht definiert
inputwidget.cpp:36: Fehler: »km« wurde in diesem Gültigkeitsbereich nicht definiert
inputwidget.cpp:41: Fehler: »datetime« wurde in diesem Gültigkeitsbereich nicht definiert
inputwidget.cpp:41: Fehler: ungültige Verwendung von »this« in Nicht-Element-Funktion
inputwidget.cpp:48: Fehler: ungültige Verwendung von »this« in Nicht-Element-Funktion
inputwidget.cpp:51: Fehler: »sport« wurde in diesem Gültigkeitsbereich nicht definiert
inputwidget.cpp:51: Fehler: ungültige Verwendung von »this« in Nicht-Element-Funktion
inputwidget.cpp:57: Fehler: ungültige Verwendung von »this« in Nicht-Element-Funktion
inputwidget.cpp:57: Fehler: »connect« wurde in diesem Gültigkeitsbereich nicht definiert
inputwidget.cpp:58: Fehler: ungültige Verwendung von »this« in Nicht-Element-Funktion
inputwidget.cpp:59: Fehler: ungültige Verwendung von »this« in Nicht-Element-Funktion
inputwidget.cpp:62: Fehler: ungültige Verwendung von »this« in Nicht-Element-Funktion
inputwidget.cpp:70: Fehler: keine passende Funktion für Aufruf von »QGridLayout::addWidget(time_t (&)(time_t*)throw (), int, int)«
/usr/include/qt4/QtGui/qgridlayout.h:86: Anmerkung: Kandidaten sind: void QGridLayout::addWidget(QWidget*)
/usr/include/qt4/QtGui/qgridlayout.h:87: Anmerkung:                  void QGridLayout::addWidget(QWidget*, int, int, Qt::Alignment)
/usr/include/qt4/QtGui/qgridlayout.h:88: Anmerkung:                  void QGridLayout::addWidget(QWidget*, int, int, int, int, Qt::Alignment)
inputwidget.cpp: At global scope:
inputwidget.cpp:78: Fehler: »InputWidget« is not a class or namespace
inputwidget.cpp: In function »void saveData()«:
inputwidget.cpp:82: Fehler: »datetime« wurde in diesem Gültigkeitsbereich nicht definiert
inputwidget.cpp:84: Fehler: »km« wurde in diesem Gültigkeitsbereich nicht definiert
inputwidget.cpp:86: Fehler: Abfrage des Elementes »text« in »time«, das vom Nicht-Klassentyp »time_t ()(time_t*)throw ()« ist
inputwidget.cpp:91: Fehler: »sport« wurde in diesem Gültigkeitsbereich nicht definiert
make: *** [inputwidget.o] Fehler 1
NoobSaibot
Beiträge: 99
Registriert: 27. Januar 2005 15:55

Beitrag von NoobSaibot »

zeig doch mal deine inputwidget datei (.h und .cpp).
doubleB
Beiträge: 11
Registriert: 16. Juli 2007 15:53

Beitrag von doubleB »

Hat sich erledigt.
Ich war so dumm in inputwidget.cpp

Code: Alles auswählen

#ifndef INPUTWIDGET_H
#define .........
einzufügen. Das hab ich übersehen beim zerteilen in inputwidget.h und inputwidget.cpp. Ein Flüchtigkeits/Frustrationsfehler :D Jetzt läuft alles einwandfrei.

Danke für eure Bemühungen :-)
Antworten