Auch wenn es für manchen QT Profi hier sicher ein leichtes ist....., ich bin halt noch Anfänger und habe hier und da noch "kleine" Verständnisproblemchen
Meine Frage
Ich habe zwei Funktionen also bsp.
void Testprogramm:FunktionA()
und
void Testprogramm:FunktionB()
beide werden über einen Button connected, Funktion a soll in diesem Bsp. Werte aus einer Liste auslesen und diese an eine Webseite übermitteln, das ganze dann weiter verarbeiten.......
Funktion b soll die Werte die Funktion A in einer QStringlist abgelegt hat mit lokalen Listen abgleichen und die Ergebnisse ausgeben.
Das ganze funktioniert auch super, aber das Problem ist das wenn alle 2 Funktionen über den Button connected werden ist Funktion A noch beschäftigt und Funktion B bringt 0 Ergebnisse weil ihr die Hälfte der Daten noch fehlt (diese müßte Funktion A ja liefern).
Konkret suche ich eine Möglichkeit am Ende von Funktion A Funktion B per Connect ein Signal zu senden und diese dann aufzurufen, dann wäre Funktion A mit allen durch und Funktion B könnte das ganze weiter bearbeiten.
Ich bin mir relativ sicher das die Lösung recht simpel ist und hier wieder für sorgt, aber ich steh mit der Sache echt auf dem Schlauch O.o
Gruß John
Signal Slot Frage
Re: Signal Slot Frage
Wenn Funktiona blockierend ist, gibt es kein Problem. Du hast aber irgend eine asynchrone Verarbeitung drinnen, die in Funktiona angestoßen wird. Funktiona beendet dann, während im Hintergrund weiter gearbeitet wird.
Was da bei dir asynchron läuft, kann man ohne Code nicht sagen.
Da FktA und FktB Member deiner Klasse sind brauchst du doch kein Signal! Da reicht ein simpler bool, der anzeigt, ob FktA gerade rechnet oder schon fertig ist.
Was da bei dir asynchron läuft, kann man ohne Code nicht sagen.
Da FktA und FktB Member deiner Klasse sind brauchst du doch kein Signal! Da reicht ein simpler bool, der anzeigt, ob FktA gerade rechnet oder schon fertig ist.
Re: Signal Slot Frage
Wenn ich das richtig verstehe, soll nach dem auf den Button geklickt wurde erst Funktion A ihre Arbeit erledigen, und dann Funktion B aufgerufen werden. Wieso rufst du denn dann nicht einfach am Ende von Funktion A Funktion B auf?
Re: Signal Slot Frage
wenn ich signal C mit funktion A und funktion B verbinde, ist dann die reihenfolge überhaupt definiert ? Glaub eher ned oder ? auch wenn es sich um direkte verbindungen handelt ?
Ansonsten denk ich schon, dass er aqssyncronitaet in A drinne hat ...
Ciao ...
Ansonsten denk ich schon, dass er aqssyncronitaet in A drinne hat ...
klingt zumindest danach ...Werte aus einer Liste auslesen und diese an eine Webseite übermitteln, das ganze dann weiter verarbeiten.......
Ciao ...
Re: Signal Slot Frage
Doch die Reihenfolge ist dieselbe, in der die connects aufgerufen wurde (jedenfalls laut Qt-Docu und meiner Erfahrung).RHBaum hat geschrieben:wenn ich signal C mit funktion A und funktion B verbinde, ist dann die reihenfolge überhaupt definiert ? Glaub eher ned oder ? auch wenn es sich um direkte verbindungen handelt ?
Dies ist allerdings (wieder laut Docu) erst seit 4.6 der Fall, in der 4.5er Docu steht noch:Qt-Docu-4.6 hat geschrieben: If a signal is connected to several slots, the slots are activated in the same order as the order the connection was made, when the signal is emitted.
Passiert im Slot a vielleicht ein processEvents? Dann würde (denke ich) Slot b "zu früh" aufgerufen werden.Qt-Docu-4.5 hat geschrieben: If a signal is connected to several slots, the slots are activated in an arbitrary order when the signal is emitted.
Re: Signal Slot Frage
Hi
Danke erstmal für die Hilfe, das Problemchen habe ich mittlerweile in den Griff bekommen.
Zu Funktion A, diese nutzt den QNetworkaccessmanager und downloaded damit eine Liste, gibt diese dann an bspw. Funktion A1 weiter, diese macht einfach ein append zur lokalen Liste und filtert danach die Duplikate, so bin ich immer auf dem neuesten Stand.Dann wiederum werden in der gedownloadeden Liste Werte mit einer lokalen Verglichen und Treffer wenn vorhanden in einer weiteren abgespeichert.
Ob da was asynchron dran ist O.o , sorry ich weiss es einfach nicht, beschäftige mich ja auch erst ca. 6 Wochen mit C++.
Im Moment habe ich es so gelöst das ich das ganze an eine if Kontrollstruktur gebunden habe, also Funktion a wird aufgerufen und erhöht am Ende einen simplen Zähler um eins (könnte natürlich auch bool sein), wenn der Zähler wert 1 erreicht hat erfüllt er die Bedingung und Funktion B wird aufgerufen, so stelle ich dann sicher das Funktion A fertig ist bevor Funktion B startet.
geht sicher auch eleganter, aber wie gesagt ich lerne ja noch .....
Gruß John
Danke erstmal für die Hilfe, das Problemchen habe ich mittlerweile in den Griff bekommen.
Zu Funktion A, diese nutzt den QNetworkaccessmanager und downloaded damit eine Liste, gibt diese dann an bspw. Funktion A1 weiter, diese macht einfach ein append zur lokalen Liste und filtert danach die Duplikate, so bin ich immer auf dem neuesten Stand.Dann wiederum werden in der gedownloadeden Liste Werte mit einer lokalen Verglichen und Treffer wenn vorhanden in einer weiteren abgespeichert.
Ob da was asynchron dran ist O.o , sorry ich weiss es einfach nicht, beschäftige mich ja auch erst ca. 6 Wochen mit C++.
Im Moment habe ich es so gelöst das ich das ganze an eine if Kontrollstruktur gebunden habe, also Funktion a wird aufgerufen und erhöht am Ende einen simplen Zähler um eins (könnte natürlich auch bool sein), wenn der Zähler wert 1 erreicht hat erfüllt er die Bedingung und Funktion B wird aufgerufen, so stelle ich dann sicher das Funktion A fertig ist bevor Funktion B startet.
geht sicher auch eleganter, aber wie gesagt ich lerne ja noch .....
Gruß John