Seite 1 von 1
[gelöst]Gobale Variable
Verfasst: 22. August 2011 13:51
von Metalmoped
Guten Tag,
ich hatte mir eigentlich vorgenommen das ich mein Problen alleine löse aber nachdem ich nun geschlagene 4 Stunden damit beschäftige und es nicht hinbekomme dachte ich mir ich frag mal diejenigen die QT richtig beherschen xD.
Variabeln von Form 1 auf Form 2 übergeben ( warscheinlich mit Global Variablen)
also bitte genaue erklärung, es gibt hier im Forum schon ein Beitrag der "Globale Variablen" heißt, jedoch funktioniert deren Lösung auch nicht bei mir
Ich wäre euch wirklich sehr dankbar wenn sich jemand oder auch mehrere kurz zeit nehmen würden um mir zu helfen.
In der zwischen Zeit probiere ich einfach weiter aus und Surfe nach weiteren Möglichkeiten.
Dennoch schon einmal danke im Vorraus
Mfg Mo
Re: Gobale Variable
Verfasst: 22. August 2011 14:01
von franzf
Metalmoped hat geschrieben:Variabeln von Form 1 auf Form 2 übergeben ( warscheinlich mit Global Variablen)
Wenn wir uns Zeit nehmen sollen, deinen Beitrag zu beantworten, solltest du auch etwas mehr Zeit aufbringen und dein Problem GENAU beschreiben.
Ich nehm einfach mal an, Form1 und Form2 sind per Designer erstellte UIs. Variablen sind die Sachen, die in einem QLineEdit o.Ä. steht. Dann suchst du einfach SIGNAL/SLOT-Verbindungen.
Im Übrigen sind globale Variablen immer Ausdruck von schlechtem Design. Man braucht die in den allerwenigsten Fällen wirklich unbedingt, in deinem Fall bringen die eher gar nichts...
Re: Gobale Variable
Verfasst: 22. August 2011 14:23
von Metalmoped
Da hast du natürlich recht, entschuldige bitte.
Also das Ganze projekt sieht so aus das ich eine Gui für ein Programm bzw eher über eine TextDatei erstellen will.
ich will eine MainWindow haben mit dem ich dann die jeweiligen Bereiche öffnen kann/ damit meine ich diverse andere Formen
in jeder einzelnen Form will ich sachen an/ausklicken können (checkBoxen) bzw etwas reinschreiben (lineEdit)
alles zusammen soll dann wieder in eine Text Datei reingeschrieben werden, bzw rausgelesen werden.
Was ich nun schon geschaft habe ist:
ein Mainwindow das alle anderen Formen öffnen kann,
mit hilfe von einer Form ( bei mir Form1) eine Textdatei einzulesen bzw reinzuschreiben.
So was nun noch fehlt ist das ich durch verschieden Formen in die gleiche TextDatei schreiben bzw auslesen kann. Wobei das auslesen kein Problem darstellt.
verinfach kann man sagen:
Form1 : variable2 = lineEdit1->text()
Form2 : variable2 = lineEdit2->text()
und nun Variable 1+2 in die Datei schreiben.
ich hatte zum einem gedacht das man mit Globalen Variabeln arbeitet und dann in dem MainWindow alles in die Datei schreibt, oder mit Pointer arbeitet ( was ich auch nicht schaffe )
Ich hoffe ich habe jetzt alle wichtigen informationen genannt und bin auch nicht zu weit von der eigentlichen Fragestellung abgewichen.
mfg Mo
Re: Gobale Variable
Verfasst: 22. August 2011 16:23
von -=Freaky=-
vielleicht solltest du erstmal ganz grundlegende prinzipien von c++ nachschlagen (z.b. zu pointern).
aber auch pointer waeren hier wohl fehl am platz. du koenntest allen dialogen properties geben (mit getProperty() und ggf. setProperty() methoden) und dann etwas machen wie
Code: Alles auswählen
Form1 f1;
int lokaleVariable1;
if(f1.exec())
{
meineVariable = f1.getVariable1();
}
muesstest dann halt getVariable1() in Form1 implementieren. entsprechend fuer alle anderen fenster die du so hast.
alternativ koennte man vielleicht Form1 ein signal geben, sodass bei aenderungen der werte (line edits oder aehnliches) gleich dein MainWindow z.b. informiert werden kann. inwiefern das fuer dich sinnvoll ist, da wird es dann vermutlich oefter als einmal ein signal geben wenn der user etwas aendert, bevor der dialog wieder geschlossen wird. und wenn du jedes mal in deine datei schreibst, obwohl das nicht noetig waere, ist das auch nicht das wahre.
Re: Gobale Variable
Verfasst: 22. August 2011 16:45
von Metalmoped
*entfernt*
Re: Gobale Variable
Verfasst: 22. August 2011 17:50
von Metalmoped
-=Freaky=- hat geschrieben:
alternativ koennte man vielleicht Form1 ein signal geben, sodass bei aenderungen der werte (line edits oder aehnliches) gleich dein MainWindow z.b. informiert werden kann. inwiefern das fuer dich sinnvoll ist, da wird es dann vermutlich oefter als einmal ein signal geben wenn der user etwas aendert, bevor der dialog wieder geschlossen wird. und wenn du jedes mal in deine datei schreibst, obwohl das nicht noetig waere, ist das auch nicht das wahre.
Das halte ich für eine sehr gute Idee, weiß leider nur nicht wie es funktioniert, bin halt ein Neuling im programmieren.
ich geb euch einfach mein Beispiel.
Diese Datei soll eingelsen werden (ist nur ein Ausschnitt):
Code: Alles auswählen
-----------Block1--------------------------------------------------------------------------------------------------
0 ! on/off
2.3d0 ! kommentar
2.0925d-11 ! Kommentar
49.d0 !Kommentar
64.d0 ! Kommentar
1275.D0 ! Kommentar
------------Block2--------------------------------------------------------------------------------------------------
0 ! Kommentar
0.5 ! Kommentar
599 ! Kommentar
-2.4d0 ! lKommentar
Zu Beginn wird die ganze Datei in der MainForm eingelesen und in einem array x[y] gespeichert.
Die Zahlenwerte werden dann an LineEdit´s oder CheckBoxen übergeben.
Dies funktioniert aber nur wenn die LineEdit´s und CheckBoxen in der MainForm sind.
jetzt beginnt mein Problem
Jeder Block soll nun eine SubForm bekommen und die Main soll die eingelesenen Werte an die SubFormen übergeben.
Dort soll man sie ändern können und danach soll die SubForm die neunen Werte wieder an die MainForm zurückgeben.
ab hier kann ich es wieder
Dann wird wieder alles in die Textdatei reingeschrieben.
Ich hoffe ich hab jetzt gut ausgedrückt, und sorry wenn ich es davor nicht getan habe.
ich hoffe weiter hin das ihr mir helfen könnt
mfg Mo
Re: Gobale Variable
Verfasst: 22. August 2011 18:13
von -=Freaky=-
ich wuerde als vorbild sowas wie QColorDialog nehmen.
da sagst du
Code: Alles auswählen
QColor myColor = getMyColorFromFile();
QColorDialog colorDlg;
colorDlg.setCurrentColor(myColor);
if(colorDlg.exec())
{
myColor = colorDlg.currentColor();
}
hat zwar mit Qt nicht viel zu tun, aber so ein verhalten sollte man doch hinbekommen.
ansonsten probier das erstmal ohne Qt und frag notfalls im c++ grundlagen-subforum (oder c-plusplus.de/forum oder google oder oder oder ...).
Re: Gobale Variable
Verfasst: 24. August 2011 12:23
von Metalmoped
Ok Vielen dank für deine Hilfe -=Freaky=- !!
Hab jetzt so gut wie alles geschafft, nur noch ein Kleines Problem habe ich, hat aber nichts mehr wirklich mit den Problemen Davor zu tun.
Also, wie schaffe ich es das Eine Form ( sagen wir Form 2), die ich über meine Main Form geöffnet habe, SOFORT alles einließt.
ich mache es im Moment so:
1. Ich drücke in meiner MainForm auf einen Push Button der mir Form 2 öffnet.
2. Dann drücke ich in Form2 auf einen PushButton ( startPushButton ) durch den dan die Datei eingelesen wird. hier ein Kleiner Ausschnitt
Code: Alles auswählen
void Form2::start()
{
centralBodyLineEdit->setText(QString::number(main_2D_array[0][0]));
gravetyPotentialLineEdit->setText(QString::number(main_2D_array[1][0]));
harmonicCoeffLineEdit->setText(QString::number(main_2D_array[2][0]));
}
start() ist : Sender = startPushButton
Signal = clicked()
reciever = Form2()
slot = start()
Ok was ich jetzt gerne haben würde ist das er Sobald die Form geöffnet wird meinen Befehl aus fürht, also die Datei einließt. aber wenn ich dies einfach am Anfang von der Form reinschreibe also nicht in eine
dann krieg ich immer folgende Fehler Meldung
Code: Alles auswählen
.ui/../interfaceform.ui.h:30: error: expected constructor, destructor, or type conversion before ‘->’ token
.ui/../interfaceform.ui.h:31: error: expected constructor, destructor, or type conversion before ‘->’ token
.ui/../interfaceform.ui.h:32: error: expected constructor, destructor, or type conversion before ‘->’ token
=( hat jemand eine Idee wie ich das ansonstne machen kann?
mfg Mo
Re: Gobale Variable
Verfasst: 24. August 2011 12:34
von franzf
"aber wenn ich dies einfach am Anfang von der Form reinschreibe "´´" ist eine recht ungenaue Beschreibung.
Prinzipiell: Wenn ein Objekt eine bestimmte Aufgabe sofort bei der Instantiierung ausführen soll, kommt der entsprechende Code in den Konstruktor. Soll die Funktionalität unabhängig vom Konstruktor ausführbar sein, kommt der Code in eine eigene Funktion (meinetwegen Form2::start()), und in den Konstruktor (Form2::Form2()) dann ein Aufruf der Funktion (start();)
Und die Fehlermeldung bringt gar nichts, weil du den entsprechenden Programmcode verheimlichst.
Re: Gobale Variable
Verfasst: 25. August 2011 13:00
von Metalmoped
tut mir leid das ich mich zum wiederholten mal nicht sauber ausgedrückt habe.
Dennoch hat alles so geklappt wie du es gesagt hast.
also Danke!!!!!
mfg Mo