Ich habe den Code:Qt: Wie verbinde ich einen QPushButton einer "DialogClass1", um einen QProcess in einer "Class2" zu beenden?
void Processmethod()
{
QDialog *ProcessMessage = new QDialog;
// HOW TO CONNECT THE DIALOGS PUSHBUTTON TO KILL THE PROCESS called in processmethodONE() ?
Ui::DialogProcessMessage Dialog; //polymorphy
Dialog.setupUi(ProcessMessage);
ProcessMessage->setModal(true);
ProcessMessage->setAttribute(Qt::WA_DeleteOnClose);
ProcessMessage->show();
processmethodONE();
}
void processmethodONE()
{
QString ProcessCommand = "w8 " + blablubli";
Prozess.setWorkingDirectory(Path); //QProcess "Prozess" is globaly defined
Prozess.setStandardOutputFile(Path); //in my class
QEventLoop loop;
connect(&Prozess, SIGNAL(error(QProcess::ProcessError)), &loop, SLOT(quit()));
connect(&Prozess, SIGNAL(finished(int, QProcess::ExitStatus)), &loop, SLOT(quit()));
Prozess.start(ProcessCommand);
loop.exec();
QProcess::ExitStatus Status = Prozess.exitStatus();
if (Status == 0)
{
std::cout <<"Exit-Status: " << Status << " File created!" << std::endl;
}
else
{
std::cout << "Exit-Status: " << Status << " Error-Code: " << Prozess.error() << "Process failed!" << std::endl;
}
}
Was ich tun möchte, ist die QProcess „Prozess“ von einem der Dialoge Tastern zu töten. Die Klasse "Ui :: DialogProcessMessage" kann nicht bearbeitet/spezifiziert werden, da es sich um die Klasse handelt, die direkt von der QtDesigner Ui-Datei erstellt wurde und daher bei jeder Bearbeitung der Ui-Datei mit QtDesigner überschrieben wird. Wie kann ich damit umgehen? Grüße
Vermeiden Sie lokale Ereignisschleifen. Sonst betrittst du eine Welt des Schmerzes. Lokale Ereignisschleifen verursachen alle Arten von Reentrancy-Problemen (da während der Ausführung beliebige Ereignisse auftreten können, beispielsweise kann jemand ProcessMethod() und processMethodOne() auslösen, während die Schleife noch ausgeführt wird), die am besten vermieden werden, indem lokale Ereignisschleifen verwendet werden. –
Ich werde die Haupt-GUI durch den Dialog blockiert haben, so dass niemand etwas auslöst, während der Prozess läuft, außer dass der Prozess abgebrochen wird. Das Eingeben einer lokalen Ereignisschleife sollte also kein Problem sein. :) – Streight
@FrankOsterfeld: Der OP hat den Vorschlag bekommen, eine lokale Ereignisschleife von seiner anderen Frage zu verwenden: http://stackoverflow.com/questions/9956304/qprocess-does- Nicht-vollständige-Erstellung-Datei. Ich stimme diesem Ansatz auch nicht persönlich zu. Ich denke, es sollte benachrichtigt werden, wenn es über Signale erfolgt. – jdi