QThread
まず、更新のニーズを処理するために、以外のものを作成する必要に遭遇したことはありません。これQProcess
は、ユーザーが更新した後、ユーザーがメインプログラムを続行している間にプログラムをダウンロード、インストール、および再起動する場合に役立ちます。(ただし、これはすべて、シェルスクリプト、Pythonスクリプト、さらにはBATファイルを使用して実現できます)
を使用する場合は、シグナルとQProcess
に依存する必要があります。次に、プロセスが呼び出しているアプリケーションは、その出力をstderrまたはstdoutに送信する必要があります。Updater.exeは、これらのファイルのいずれかに書き込む必要があります。readyReadStandardError()
readyReadStandardOutput()
私はあなたのアップデーターがを利用することを想像しますQNetworkAccessManager::finished(QNetworkReply *reply)
。このスロットが呼び出されたら、これよりも良いことをしてください。
void Updater::replyFinished(QNetworkReply *reply){
QString r(reply->readAll());
if(r.contains(SERVER_REPLY_UPDATE_AVAILABLE)){
qDebug() << "yes";
}else{
qDebug() << "no";
QApplication::quit();
}
}
Updater.exeが本格的なGUIアプリケーションになる場合は、必要な場合を除いてメソッドを呼び出さないshow()
でください。バックグラウンドで実行されているように見えるはずです。私はスクリプトが好きですが、あなたは私を知っています。
次に、Game.exeがを設定しますQProcess
。関数内のプロセスに引数を渡すことができQProcess::start()
ます。
更新プロセスを指示するのに役立つ適切な議論は次のとおりです。
- Game.exeのバージョン番号
- "更新を確認する"
- 「ignore_updates」
- 「download_update」
最後に、Game.exeで:
...
connect(process,SIGNAL(readyReadStandardError()),this,SLOT(readProcessReply()));
...
void Game::readProcessReply(){
QString r(process->readAllStandardError());
if(r.contains("yes")){
//show your dialog here
}else{
//do nothing
}
}