Ich mache einen Ping an eine IP-Adresse, und ich möchte in einer QMessageBox zeigen, dass eine Ping-Operation läuft. Danach, wenn eine Antwort empfangen wird oder eine Sekunde Zeitüberschreitung auftritt, möchte ich die QMessageBox schließen.QMessage während ich auf eine Antwort des Ping-Befehls warte
Code:
int status;
QByteArray command;
QMessageBox myBox(QMessageBox::Information, QString("Info"), QString("Checking connection"), QMessageBox::NoButton, this);
command.append("ping -w 1 172.22.1.1");
status=system(command);
myBox.setStandardButtons(0);
myBox.exec();
if (0==status){ // Response received
// Some stuff here...
myeBox.setVisible(false);
}
else { // Timeout
// Some other stuff here...
myBox.setVisible(false);
}
Meine Vermutung ist, dass ich Themen für diese Aufgabe verwenden müssen, aber da ich ein Qt-Neuling bin vielleicht das Problem irgendwo anders ist.
EDIT: Als @atamanroman schlug ich habe versucht, QProcess zu verwenden, Signalauslöschung QProcess mit :: fertigen (int exitcode, QProcess :: ExitStatus exitStatus) [Signal], wie in Qt Referenz gesagt:
private:
QProcess *process;
//...
QMessageBox myBox(QMessageBox::Information, QString("Info"), QString("Checking connection"), QMessageBox::NoButton, this);
QObject::connect(&process, SIGNAL(finished(int, QProcess::ExitStatus)), &myBox, SLOT(close()));
command.append("ping -w 1 172.22.1.1");
process.start(comdand);
myBox.setStandardButtons(0);
myBox.exec();
Und es funktioniert nicht. myBox ist niemals geschlossen. Was ist los mit dir?
Wo sollte das Meldungsfeld (oder, besser, QProgressDialog) ein Klassenmitglied statt lokal auf dem Stapel erstellt werden und in den Schlitzen QProcess :: beendeten() und :: error() verbunden werden. –
Sollte ich mit done() schließen, geerbt von QDialog? –