Invoke Methode

Alles rund um die Programmierung mit Qt
Antworten
RobertKnochen
Beiträge: 1
Registriert: 29. Januar 2017 15:44

Invoke Methode

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Invoke Methode

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten