Seite 1 von 1

Invoke Methode

Verfasst: 29. Januar 2017 15:58
von RobertKnochen
Hallo Community,

ich habe ein Problem das zur Laufzeit einen berechtigten Fehler ausgibt aber die Lösung finde ich nicht.

Ich rufe aus einem anderen Thread eine Funktion im meiner Gui auf:

void MainWindow::ShowTastatur()
{
Tastatur.show();
}
wie zu erwarten kommt der Segmentations foult Fehler da ich aus dem Falschen Thread darauf zugriffe.

In C# das ich heufig nutze gibt es die Invoke Funktion
vereinfacht mal dargestellt:
void ShowTastatur()
{
if(Invoke(this, this.ShowTastatur())
{
}
else
{
Tastatur.show();
}
}

Ich suche nun nach einer Möglichkeit das selbe in QT durchzuführen?
Ich habe schon die Funktion QMetaObject::InvokeMethode(this,"ShowTastatur") gefunden aber diese funktioniert leider nicht.
Ich würde mich sehr freuen über Hilfe.

Gruß Robert

Re: Invoke Methode

Verfasst: 30. Januar 2017 06:31
von Christian81
Das geht einfach per Signals & Slots.
Der Thread emitiert ein Signal und der GUI-Thread fängt es in einem Slot auf. Dabei achtet Qt selbst auf den Context-Wechsel. Dabei muss das Objekt, welches das Signal emittiert natürlich auch im Nebenthread 'leben' - d.h. dort erzeugt worden sein.