Seite 1 von 1
QString in Datei speichern
Verfasst: 16. Juli 2007 21:46
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
Verfasst: 16. Juli 2007 21:53
von upsala
Hast du dir schon die Dokumentation von QFile inklusive der enthaltenen Beispiele angeschaut, oder sollen wir diese hier noch mal reinposten?
Verfasst: 16. Juli 2007 21:54
von NoobSaibot
hier schon nachgeschaut? ich weiß nicht was man da noch besser machen könnte.
Verfasst: 16. Juli 2007 22:32
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:
Aufruf:
Gruß[/code]
Verfasst: 16. Juli 2007 22:52
von NoobSaibot
du könntest vergessen haben Q_OBJECT in die Klasse einzufügen.
Verfasst: 17. Juli 2007 08:30
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.
Verfasst: 17. Juli 2007 08:37
von Christian81
Du inkludierst moc_inputwidget.cpp in main.cpp was falsch ist.
Verfasst: 17. Juli 2007 08:47
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.
Verfasst: 17. Juli 2007 08:51
von Christian81
Ok, Du hast die Implementation deiner Klassenfunktionen im Header. Das geht nicht (so ohne weiteres)
Verfasst: 17. Juli 2007 08:55
von doubleB
Okay und wo soll ich die sonst unterbringen? In einer 2. cpp-Datei?
Verfasst: 17. Juli 2007 08:56
von Christian81
doubleB hat geschrieben:In einer 2. cpp-Datei?
Nunja, normalerweise wird das so gemacht, ja.
Verfasst: 17. Juli 2007 09:27
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
Verfasst: 17. Juli 2007 09:32
von NoobSaibot
zeig doch mal deine inputwidget datei (.h und .cpp).
Verfasst: 17. Juli 2007 09:37
von doubleB
Hat sich erledigt.
Ich war so dumm in inputwidget.cpp
einzufügen. Das hab ich übersehen beim zerteilen in inputwidget.h und inputwidget.cpp. Ein Flüchtigkeits/Frustrationsfehler

Jetzt läuft alles einwandfrei.
Danke für eure Bemühungen
