IPアドレスに対してpingを実行していますが、ping操作が進行中であることをQMessageBoxに表示したいとします。その後、応答が受信された場合や1秒のタイムアウトが発生した場合は、QMessageBoxを閉じます。QMessageがpingコマンドの応答を待っています
コード:
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);
}
私の推測では、私は、このタスクのためにスレッドを使用する必要があるかもしれないということですが、私はQtのの初心者ですので、多分問題はどこにもあります。
EDIT: @atamanroman私は信号ボイドQProcessを使用して、QProcessを使用しようとしました::完成示唆したように(int型EXITCODE、QProcess ::終了ステータス終了ステータス)Qtのリファレンスに語ったよう信号]:
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();
これは機能しません。 myBoxは決して閉じられません。どうしましたか?
メッセージボックス(または、より良いQProgressDialog)は、スタックにローカルに作成されず、QProcess :: finished()および:: error()スロットに閉じられる代わりに、クラスメンバーでなければなりません。 –
QDialogから継承したdone()で閉じるべきですか? –