Methode um Werte in Textdateien zu übergeben

Du bist neu in der Welt von C++? Dann schau hier herein!
TerraG
Beiträge: 81
Registriert: 13. Oktober 2011 15:23

Methode um Werte in Textdateien zu übergeben

Beitrag von TerraG »

Hi,

ich bräuchte eine Methode um einen Wert aus einem LineEditWidget in eine Textdatei zu übergeben, d.h. dass z.B. bei Klick auf einen PushButton mehrere Werte aus verschiedenen LineEdits in verschiedene Textdateien geschrieben werden sollen bzw. alte Werte überschreiben sollen. Den Button und die LineEdits kann ich ja einfach mit einer connect Methode verbinden, nun bräuchte ich halt noch wie gesagt die Methoden um die Werte an die jeweiligen Dateien zu übergeben. Hat vielleicht jemand einen Link in die Qt Dokumentation zu der/den entsprechenden Methode(n)?

Meiner Auffassung nach ist diese Lösung ja sehr unprofessioniell, da ich die Werte auch noch an die richtigen Stellen der Textdatei schreiben muss und die alten Werte unbedingt überschrieben werden müssen. Wenn jemand eine wirklich gute Lösung für dieses Problem nennen kann (weil er sich vielleicht schonmal mit etwas ähnlichem befasst hat etc.), wäre das natürlich noch viel besser...


Danke schonmal für die Antworten.
Gruß
TerraG
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Methode um Werte in Textdateien zu übergeben

Beitrag von Christian81 »

Siehe QFile
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Markow
Beiträge: 19
Registriert: 17. November 2011 10:54

Re: Methode um Werte in Textdateien zu übergeben

Beitrag von Markow »

Hast du schonma dran gedacht eine *.ini zu erstellen?

Dafür gibt es mit include "windows.h" bereits Funktionen, die unter einer "Section" einer Variable "Key" einen Wert "Value" zuteilen. Damit ist überschrieben und auslesen natürlich geschenkt ;)

Code für Schreiben:

Code: Alles auswählen

WritePrivateProfileString("Section","Key","Value","Dateiname.ini"); 
almboa
Beiträge: 21
Registriert: 27. September 2009 11:52

Re: Methode um Werte in Textdateien zu übergeben

Beitrag von almboa »

Wenn schon mit ini-Datei, dann mit QSettings statt windows-api!
TerraG
Beiträge: 81
Registriert: 13. Oktober 2011 15:23

Re: Methode um Werte in Textdateien zu übergeben

Beitrag von TerraG »

Hi,

ich hatte mir jetzt überlegt, dass ich das in etwa so mache:
1. Ich ordne den LineEdit Widgets double Variablen zu.
2.Dann führe ich eine Art Methode Createfile() mit bestimmtem Text (String) und der double Variable an manchen Stellen aus.

Ist das so möglich und welche Methoden bräuchte ich da?

Code: Alles auswählen

WritePrivateProfileString("Section","Key","Value","Dateiname.ini"); 
Was hat es genau mit dieser Methode auf sich bzw. wo kann ich das nachlesen?

Gruß
TerraG
Gruß
TerraG
almboa
Beiträge: 21
Registriert: 27. September 2009 11:52

Re: Methode um Werte in Textdateien zu übergeben

Beitrag von almboa »

Es kommt darauf an was du speichern willst.

Willst du Text speichern? -> QFile+QTextStream
Willst du Binärdaten speichern? -> QFile + QDataStream
Key/Value-Paare? -> QSettings

Mit QSettings wird (z.B.) eine Text-Datei erzeugt, die in etwa so aussieht:

Code: Alles auswählen

[General]
ADoubleValue=1.0
AString=text

[Special]
SpecialString=imsospecial
Was du brauchst ist setValue() und value() von QSettings und einige "toDatentyp()-Funktionen" von QVariant. Mehr dazu in der Doku!


Edit: Lass das mit den Funktionen aus der windows.h! Mit QSettings funktioniert das ganze os-unabhängig!
Markow
Beiträge: 19
Registriert: 17. November 2011 10:54

Re: Methode um Werte in Textdateien zu übergeben

Beitrag von Markow »

QSettings ist ntürlich besser!

Bei windows.h ist einfach stumpfer :D
TerraG
Beiträge: 81
Registriert: 13. Oktober 2011 15:23

Re: Methode um Werte in Textdateien zu übergeben

Beitrag von TerraG »

Hi nochmal,

also ich weiss nicht recht ob das die richtigen Methoden/Klassen sind die Du mir da gegeben hast.

QSettings: Ermöglicht das Speichern der Anwendungs/Gui Einstellungen
QVariant: Anlegen von QVariant Objekten, die man dann u.U. in andere Variablen konvertieren kann (?)

Noch mal kurz zu meinem Projekt:

Ich habe einige LineEdit Widgets (Objekte) in meiner GUI in die immer ZAHLEN, meist Typ double eingetragen werden. Den Inhalt jedes LineEdit Widgets würde ich gerne je unter einer anderen globalen double Variablen meiner Klasse abspeichern, da ich diese für weitere Methoden benötige.

Ob die Anwendung/GUI ihre letzten Einstellungen speichert (QSettings) ist mir völlig egal und das mit QVariant check ich nicht ganz xD.
Gruß
TerraG
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Methode um Werte in Textdateien zu übergeben

Beitrag von franzf »

Vorher wolltest du in eine Datei schreiben, jetzt sollen es globale Variablen sein.
Die Frage die sich stellt:
WAS willst du erreichen?
Für mich hört sich das alles nämlich recht fragwürdig an. Globale Variablen, nur um den aktuellen State eines lokalen LineEdits zu speichern? Zweifelhaft.
Des weiteren: Für Zahlen gibt es Q[Double]SpinBox.
TerraG
Beiträge: 81
Registriert: 13. Oktober 2011 15:23

Re: Methode um Werte in Textdateien zu übergeben

Beitrag von TerraG »

Also die Idee aus meinem ersten Beitrag hat sich erledigt, da das zu fehleranfällig gewesen wäre. Erreichen will ich folgendes:

Die Eingabe in einem LineEdit Widget unter einer Variablen abspeichern. Diese Variable benötige ich um in einer anderen Methode eine Datei mit bekanntem Inhalt/Aufbau zu erstellen, in welchen ich an eine gewisse Stelle die Variable einsetzen muss. Damit habe ich "mit meiner GUI" eine Textdatei erstellt, die ein anderes Programm (mit welchem ich arbeite) aufgrund des AUfbau/Inhalts problemlos auslesen kann und sich so ausführen lässt.

Das sehe ich soweit als einfachste Lösung um mit den Kommazahlen aus den LineEdit Widgets entsprechende Textadateien zu erstellen. Des weiteren ist dies wohl auch viel weniger fehleranfällig als meine erste Idee (also vergessen wir mal die erste Idee :mrgreen: ).
Gruß
TerraG
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Methode um Werte in Textdateien zu übergeben

Beitrag von franzf »

Wie gesagt: globale Variablen verwenden, um den State lokaler Objekte zu speichern ist nix gut.
Du hast bisher noch kein Wort darüber verloren, wie denn die UI mit der ominösen anderen Methode zusammenhängt. Wenn die ein Member deines MainWindow ist -> wo ist das Problem?
Ansonsten kannst du beliebig Objekte rumreichen und darauf Methoden aufrufen.
Ich seh das Problem nicht.
TerraG
Beiträge: 81
Registriert: 13. Oktober 2011 15:23

Re: Methode um Werte in Textdateien zu übergeben

Beitrag von TerraG »

Wie gesagt: globale Variablen verwenden, um den State lokaler Objekte zu speichern ist nix gut.
Ok, dass erkenne ich natürlich an, aber was heisst denn genau State, denn ich will ja nicht alle Daten des Objektes wie Breite, Länge, Farbe etc. speichern wenn nicht zwingend notwendig, sondern eben nur die Eingabe im LineEdit Widget.
Du hast bisher noch kein Wort darüber verloren, wie denn die UI mit der ominösen anderen Methode zusammenhängt. Wenn die ein Member deines MainWindow ist -> wo ist das Problem?
Die andere Methode die die Datei erstellt, gehört natürlich auch zum Projekt. Die fehlt mir aber auch noch.

Jetzt mal kurz und bündig:
Ich will eine Datei erstellen mit konstantem Inhalt, abgesehen davon das an eine Stelle der Datei der Wert aus dem LineEdit muss. Mit welchen Methoden kann ich das bewerkstelligen bzw. zu welcher Klasse gehören die Methoden?
Das ist was ich wissen möchte und mehr nicht. Der Name und der Aufbau der Datei ist fest,d.h. ich muss den vorgeben können und den Wert der Variablen an die richtige Stelle setzen können.
Das Programm welches diese Datei ausliest hat mit meiner UI dann eigentlich nicht mehr viel zu tun, abgesehen davon, dass ich das Programm aus meiner UI starte, aber erstmal eines nach dem anderen.

Kann mir jemand sagen mit welchen Methoden ich das bewerkstelligen kann?
Gruß
TerraG
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Methode um Werte in Textdateien zu übergeben

Beitrag von Christian81 »

Den Wert aus dem LineEdit kann man z.B. mit QLineEdit::text() auslesen. Eine (Text)Datei kann man mittels QFile und/oder QTextStream erzeugen. Der Rest ist C++ Grundlagen...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
TerraG
Beiträge: 81
Registriert: 13. Oktober 2011 15:23

Re: Methode um Werte in Textdateien zu übergeben

Beitrag von TerraG »

Dankesehr, das schau ich mir an.
Gruß
TerraG
TerraG
Beiträge: 81
Registriert: 13. Oktober 2011 15:23

Re: Methode um Werte in Textdateien zu übergeben

Beitrag von TerraG »

Hab grad ein kleines Problem. Eine meiner LineEdits hat den Namen "pEingabe"

Nun habe ich mit dem Code

Code: Alles auswählen

pEingabe->setText("Hello World");
nur zu Testzwecken versucht den Text im LineEdit voreinzustellen und bekomme aber leider die Fehlermeldung

Code: Alles auswählen

Führe Build-Schritte für Projekt KühniGUI aus...
Unveränderte Konfiguration, qmake-Schritt wird übersprungen.
Starte "/usr/bin/make" -w
make: Gehe in Verzeichnis '/home/frighter/Arbeitsfläche/KühniGUIquelltext'
g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -DQT_WEBKIT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++-64 -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -o main.o main.cpp
main.cpp: In Funktion »int main(int, char**)«:
main.cpp:10:4: Fehler: »pEingabe« wurde in diesem Gültigkeitsbereich nicht definiert
make: *** [main.o] Fehler 1
make: Verlasse Verzeichnis '/home/frighter/Arbeitsfläche/KühniGUIquelltext'
Der Prozess "/usr/bin/make" wurde mit dem Rückgabewert 2 beendet.
Fehler beim Erstellen des Projekts KühniGUI(Ziel: Desktop)
Bei der Ausführung von Build-Schritt 'Make'
Der Kompiler gibt also aus, dass pEingabe nicht definiert ist, wobei ich halt nur sagen kann, dass es in der Basisklasse definiert ist. Was müsste ich da ändern?
Gruß
TerraG
Antworten