QProcessでwscriptを実行して、Excelファイルをタブ区切りのテキストファイルに変換するVBスクリプトを実行しています。スクリプトは正常に実行されますが、GUIはフリーズし、ユーザーはかなりの時間にわたってスクリプトを操作できません。GUIがフリーズするのを止めるにはQProcessでwaitForStartedを避けるには?
/* Create txt files and store paths */
for (int i = 0; i < excelFilepaths.size(); ++i) {
wscript->start("wscript.exe", QStringList() << vbs.fileName() << excelFilepaths.at(i) << newDir.absolutePath() + "/" + QString::number(i + 1));
wscript->waitForFinished();
payloadPaths.push_back(newDir.absolutePath() + "/" + QString::number(i + 1));
}
これは、ヒープ上に複数のExcelファイルパスとQProcessが割り当てられていることです。このQProcessは、Excelファイルをテキストファイルに変換し、新しいテキストファイルのパスを保存するVBスクリプトを実行します。これには長い時間がかかります(4つのExcelファイルで約20秒)。この間、GUIはフリーズします。私は、ユーザーがプロセスに干渉しないGUIの部分を使用できるようにしたいと思います。
は、今私は、この問題の原因は
QProcess::waitForFinished()
であり、私はこの問題を取り除くために)完成()とエラー(接続に関するオンラインQProcessの信号を読んだと思われます。しかし、私はそうすることが困難でした。 QObjectから継承し、Q_OBJECTマクロを含むクラスのメソッドとしてこのコードを実行しているので、すべてを設定する必要があります。私はちょうど一緒に作品の残りの部分を置くいくつかの助けが必要です。 QProcessの実行中にGUIがフリーズしないようにするにはどうすればよいですか?助けてください。
*しかし、私はこれをやっているのが難しかった*あなたは何を試しましたか?何が失敗した? – peppe
* "QProcessの実行中にGUIがフリーズしないようにするにはどうしたらいいですか?" * - "QProcessの*終了信号(*)と*"信号をローカルスロットに接続し、同期 'waitForFinished'コール。 – IInspectable
どうすればそれらの信号を接続できますか?どのようにこれは私の問題を排除しますか?私はconnect(process、&QProcess :: finished、this、&CustomClass :: slotHere)のような何かをすると思います。または、カスタムスロットを取り除いて接続することができます(プロセス、&QProcess :: finished、lambdaHere)。例は非常に役に立ちます – Dillydill123