Ich habe den Hauptthread (GUI), der einen QThread erzeugt.Anzeige einer QMessageBox aus C-Code, der in einem QThread läuft
In der QThread, rufe ich eine C-Funktion, die eine QMessageBox anzeigen muss. Bisher habe ich einfach verwendet:
void notify(char *str)
{
QMessageBox::information(0, "", QString(str));
}
im C++ - Code und rief es aus dem C-Code. Dies funktioniert ohne Threads, aber jetzt mit Threads bekomme ich Fehler, weil man die GUI-Funktionen nicht von einem anderen Thread aufrufen kann.
Normalerweise könnte dies umgangen werden mit Signalen wie die Antwort auf this question schlägt vor; Ich bezweifle jedoch, dass ich das vom C-Code aus tun kann.
Also, wie kann ich den C-Code mit dem GUI-Thread kommunizieren lassen und ihm mitteilen, dass er eine QMessageBox anzeigen soll?
Danke.
P.S.
Wenn möglich, würde ich dies tun, ohne den C-Code zu berühren (ab sofort gibt es einfach eine extern void notify(char *)
Deklaration in den Kopfzeilen des C-Codes, und wenn möglich, möchte ich es bleiben.
Vielen Dank für Ihre Antwort! Ich denke, du hast meine Antwort ein wenig falsch verstanden oder ich habe es falsch erklärt, aber die 'notify' (nicht-klassen) -Funktion ist eigentlich im C++ - Code (der C-Code nennt es nur), was es ein wenig einfacher macht, da ich es kann ** Holen Sie den Zeiger auf das 'MyWidget' in Ihrem Beispiel. Also kann ich die Methoden meiner Hauptfensterklasse aufrufen, die dann Signale und Slots verwenden, wie Sie es vorgeschlagen haben. Aber wie auch immer, ich habe Ihren Ansatz verwendet, es funktioniert gut (außer der Compiler mochte nicht "öffentliche Signale", es ist nur "Signale"), also vielen Dank! – houbysoft