2017-07-05 3 views
0

Ich arbeite an einem Code, der es dem Benutzer ermöglicht, einen Piezo (PZ193E) in einem MainWindow zu steuern, das mit dem Qt Designer-Formular erstellt wurde.Loading QDialog ist leer, wenn gezeigt

Wenn ich jedoch die Funktion aufrufen, um den Piezo mit dem Computer zu verbinden (von einer externen Bibliothek, die vom Konstruktor vorgegeben wird), bleibt meine Benutzeroberfläche stehen, bis die Verbindung hergestellt ist.

Ich versuche, einen QDialog mit einem QLabel darin anzuzeigen und dem Benutzer zu sagen, dass er warten soll, während die Verbindung verarbeitet wird, aber wenn ich dies tue, erscheint der QDialog, aber ohne das Etikett. Es wird nur angezeigt, wenn die Verbindung hergestellt und der QDialog geschlossen werden kann.

Hier ist, wie ich meine Dialog codiert:

In the .h : 
QDialog *_waitQD = new QDialog; 
QVBoxLayout *_waitQVBL = new QVBoxLayout; 
QLabel *_waitQL = new QLabel("Loading..."); 

In the .cpp : 
_waitQD->setMinimumSize(QSize(95,35)); 
_waitQVBL->addWidget(_waitQL); 
_waitQD->setLayout(_waitQVBL); 

Und dann rufe ich:

_waitQD->show(); 
if (_piezo.connected()) // bool funtion that return true if the connection is established 
     _waitQD->close(); 

Dies ist, wie es aussieht:
Blank QDialog

+0

es auf Qt funktioniert 5.7 msvc2015 (es sollte "_waitQD-> show();") – prasadmadanayake

+0

Ich habe den Fehler beim Kopieren meines Codes gemacht, ich benutze das "->" im echten! aber danke :) –

Antwort

0

Die ideale Lösung nicht ist Blockieren des Hauptthreads beim Herstellen der Verbindung; die Abhilfe ist das Hinzufügen QApplication::processEvents(); nach dem Aufruf

0

Sie rufen app.exec müssen zeigen()

#include <QApplication> 

#include <QDialog> 
#include <QVBoxLayout> 
#include <QLabel> 
int main(int argc, char *argv[]) 
{ 

    QApplication app(argc, argv); 

    QDialog *_waitQD = new QDialog; 
    QVBoxLayout *_waitQVBL = new QVBoxLayout; 
    QLabel *_waitQL = new QLabel("Loading..."); 

    _waitQD->setMinimumSize(QSize(95,35)); 
    _waitQVBL->addWidget(_waitQL); 
    _waitQD->setLayout(_waitQVBL); 

    _waitQD->show(); 

    return app.exec(); 
} 
Verwandte Themen