Ich habe zuvor ein ähnliches Problem in this question gelöst, wo ich fragte, wie eine QMessageBox von einem nicht GUI-Thread in Qt laufenden C-Code anzuzeigen.Getting QInputDialog :: GetText() Ergebnis von C-Code in Nicht-GUI-Thread ausgeführt
Die Lösung, die ich vorgeschlagen wurde, zu verwenden, um Signale & Slots und ein Qt :: QueuedConnection ein Signal zu verbinden, die durch den C-Code Aufruf eine C++ Funktion, die wiederum so genannten C++ Methode meiner Haupt GUI-Fenster emittiert werden könnten, die dann emittierte das Signal, funktioniert gut für QMessageBoxes.
Allerdings muss ich jetzt in der Lage sein, Eingaben von einem QInputDialog von dem C-Code anzufordern, der im Nicht-GUI-Thread ausgeführt wird.
Ich habe darüber nachgedacht, den folgenden Slot Code und nach dem gleichen Prinzip wie oben beschrieben:
void MyWidget::prompt_slot(QString str, QString &answer)
{
answer = QInputDialog::getText(0, "", str);
}
und Qt :: BlockingQueuedConnection, so dass der Schlitz den Verweis auf eine Zeichenfolge ändert, dass ich dann zugreifen der C-Code.
Leider bekomme ich die folgende Laufzeitfehler:
QObject::connect: Cannot queue arguments of type 'QString&'
(Make sure 'QString&' is registered using qRegisterMetaType().)
Was mache ich falsch? Wird durch Annäherung sogar funktionieren? Wenn nicht, was sollte ich verwenden?
Vielen Dank für Ihre Antwort.
Nun, das war einfach, mit einem Zeiger anstelle einer Referenz funktioniert. Vielen Dank! – houbysoft