J'ai le code suivant:Comment utiliser un processus (QProcess) dans un nouveau thread (QThread)?
void Processmethod()
{
QDialog *ProcessMessage = new QDialog;
Ui::DialogProcessMessage Dialog;
Dialog.setupUi(ProcessMessage);
ProcessMessage->setModal(true);
ProcessMessage->setAttribute(Qt::WA_DeleteOnClose);
ProcessMessage->show();
qApp->processEvents();
processmethodONE();
processmethodTWO();
processmethodTHREE();
}
void processmethodONE()
{
QString ProcessCommand = "w8 " + blablubli";
Prozess.setWorkingDirectory(Path); //QProcess "Prozess" is globaly defined
Prozess.setStandardOutputFile(Path); //in my class
QThread* thread = new QThread;
Prozess.moveToThread(thread);
Prozess.start(ProcessCommand);
while(!Prozess.waitForFinished(2000))
{
std::cerr << "Process running " << std::endl;
}
QProcess::ExitStatus Status = Prozess.exitStatus();
if (Status == 0)
{
std::cout << "File created!" << std::endl;
}
}
Dans ce code source, je tente d'ouvrir une boîte de dialogue pop-up avant que certains processus commencent. Le problème est que la boîte de dialogue n'est pas cliquable, mais dans la boîte de dialogue, je veux créer un bouton pour abandonner la méthode en cours. Comme vous pouvez le voir, j'ai essayé d'utiliser QThread pour lancer le (s) processus dans un autre thread, mais je n'arrive toujours pas à cliquer sur le dialogue. De plus, si j'ouvre mon application (GUI) avec le fichier "application/x-executable", le contenu des dialogues est manquant lors de l'activation de la méthode ci-dessus. Comment puis-je résoudre ces problèmes? Où ai-je tort? salutations
J'ai quelques questions ... 1) Comment appelez-vous 'Processmethod()'? 2) Pourquoi pensez-vous que vous devez créer un QThread et y insérer le QProcess? Et aussi, pourquoi ne lancez-vous pas le nouveau QThread? 3) Utilisez-vous ce QProcess global pour tous vos 'processmethodX()'? – jdi
cela ne correspond pas à la question, mais je vous suggère d'écrire des noms de variables dans _lowerCamelCase_. C'est très lisible rapidement. Cependant, je suis d'accord avec JDI, besoin de plus d'informations pour répondre. – jalone
Il n'est généralement pas nécessaire d'exécuter QProcess dans un thread, car son API ne bloque pas, sauf si vous utilisez les méthodes waitForStarted/Finished. –