Seite 1 von 1

Hintergrundprozess automatisch entfernen

Verfasst: 9. August 2015 14:13
von ak24
Hallo zusammen,

Ich entwickle ein Programm mit einer Rechtsbelehrung am Anfang. Wenn ich auf den Ok-Button klicke öffnet sich wie gewollt das Hauptprogramm, aber wenn ich auf den Abbrechen-Button klicke, dann bleibt ein Hintergrundprozess im Taskmanager und das Hauptprogramm wird nicht ausgeführt (wie gewollt). Meine Frage ist, wie man diesen Prozess entfernen kann.

Hier den Quellcode von der rechtsbelehrung.cpp:

Code: Alles auswählen

#include "rechtsbelehrung.h"
#include "ui_rechtsbelehrung.h"
#include "hauptprogramm.h"
#include <QSettings>

Rechtsbelehrung::Rechtsbelehrung(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Rechtsbelehrung)
{
    ui->setupUi(this);
    Rechtsbelehrung::setWindowTitle("Rechtsbelehrung");
    ui->PUB_OK->setEnabled(false);
    ui->RAB_Nein->setChecked(true);
    connect(ui->PUB_Abbrechen,SIGNAL(clicked()),SLOT(PUB_Abbrechen_Clicked()));
    connect(ui->RAB_Ja,SIGNAL(clicked()),SLOT(RAB_Ja_Clicked()));
    connect(ui->RAB_Nein,SIGNAL(clicked()),SLOT(RAB_Nein_Clicked()));
    connect(ui->PUB_OK,SIGNAL(clicked()),SLOT(PUB_Ok_Clicked()));
}

Rechtsbelehrung::~Rechtsbelehrung()
{
    delete ui;
}

void Rechtsbelehrung::RAB_Ja_Clicked()
{
    ui->PUB_OK->setEnabled(true);
}

void Rechtsbelehrung::RAB_Nein_Clicked()
{
    ui->PUB_OK->setEnabled(false);
}

void Rechtsbelehrung::PUB_Ok_Clicked()
{
    widget = new Hauptprogramm(0);
    Rechtsbelehrung::close();
    widget->show();
}

void Rechtsbelehrung::PUB_Abbrechen_Clicked()
{
    Rechtsbelehrung::close();
}
Was muss ich noch in die Methode PUB_Abbrechen_Clicked() implementieren, dass der Hintergrundprozess automatisch entfernt wird.

Gruß
Aaron K.

Re: Hintergrundprozess automatisch entfernen

Verfasst: 9. August 2015 16:03
von m-obi
Versuch mal mit

Code: Alles auswählen

QApplication::quit();
Lange nicht mehr einen gesehen der in denglisch programmiert :D

Re: Hintergrundprozess automatisch entfernen

Verfasst: 9. August 2015 17:41
von ak24
Ok,
Danke für die schnelle Antwort.
Ich werde es mal probieren.
Wenn es nicht funktioniert melde ich mich nochmal.

Gruß
Aaron K.

Re: Hintergrundprozess automatisch entfernen

Verfasst: 10. August 2015 09:56
von ak24
Funktioniert leider nicht.
Im Taskmanager unter Details bleibt der Prozess noch.
Hat jemand eine Lösung, wie man diesen Prozess entfernen kann?
Vielleicht mit der Klasse QProcess?

Gruß
Aaron K.

P.S. Am Ende des Hauptprogrammes gibt es ein CloseEvent

Re: Hintergrundprozess automatisch entfernen

Verfasst: 10. August 2015 10:14
von m-obi
Also bei mir klappt es immer. Wird irgendwo was nicht deleted?

Re: Hintergrundprozess automatisch entfernen

Verfasst: 10. August 2015 11:04
von odt
poste mal Dein main respektive wo der Dialog aufgerufen wird.

Re: Hintergrundprozess automatisch entfernen

Verfasst: 10. August 2015 12:26
von ak24
Wenn ich auf Ok gehe wird ein widget erstellt.
Vielleicht muss ich es auch bei Abbrechen erstellen und dann zerstören und dann mit

Code: Alles auswählen

QApplication::quit ();
werde ich es beenden
Ich werde es mal probieren.

Gruß
Aaron K.

Re: Hintergrundprozess automatisch entfernen

Verfasst: 10. August 2015 13:58
von ak24
Hier ist die main.

Code: Alles auswählen

QApplication a(argc, argv);
Hauptprogramm w;
w.hide();
Rechtsbelehrung recht;
recht.setModal(true);
recht.exec();
return a.exec();
In C++ kann man durch die Systemanweisung im windows.h handeln, aber es kommt ein Fenster. Wie bekommt man das in Qt 5.4 hin, dass ein Prozess beendet wird?

Gruß
Aaron K.

Re: Hintergrundprozess automatisch entfernen

Verfasst: 10. August 2015 14:18
von odt
exec entspricht dem Haupt-Event-Loop.
das erste exec (vom Dialog) wird durch den quit beendet.
anschliessend geht er mit a.exec erneut in den loop.
daher würde ich den "result" des Dialoges speichern und prüfen, quasi

Code: Alles auswählen

Rechtsbelehrung...Clicked
   setResult( QDialog::Accepted respektive Rejected );

QApplication a(argc, argv);
Rechtsbelehrung recht;
recht.setModal(true); // ist das nötig? 
recht.exec();
if( recht.result() != QDialog::Accepted )
  return 0;
Hauptprogramm w;
// w.hide(); 
w.show();
return a.exec();

[gelöst] Hintergrundprozess automatisch entfernen

Verfasst: 10. August 2015 14:30
von ak24
Daaaaaaaaaaaaaaaaaaanke,
funktioniert prima!

Gruß
Aaron K.

Re: Hintergrundprozess automatisch entfernen

Verfasst: 10. August 2015 14:39
von m-obi
Also ich hätte es jetzt so gemacht.

Code: Alles auswählen

    QApplication a(argc, argv);
    
    Rechtsbelehrung recht;
    if (recht.exec() != QDialog::Accepted) return 0;
    
    Hauptprogramm w;
    w.show();
    
    return a.exec();
Aber odt's Lösung ist auch gut.

Re: Hintergrundprozess automatisch entfernen

Verfasst: 11. August 2015 13:33
von RHBaum
Ich find allein im raum stehende modale dialoge eh hässlich. Ist aber auch geschmackssache ...

Ich wuerd das Mainwindow hochfahren ... und das abhandeln der rechte-belehrung in ner postinitialize funktion reinbauen.
Den Modalen Dialog dann ueber das Mainwindow legen ....
und von da aus dann auch das ggf. quit aufrufen.
Das heisst man kann die ganzen Settings und Datenoperationen ans Mainwindow binden, wo sie gut aufgehoben sind, und zur entscheidungsfindung ob der Dialog angezeigt wird oder ned beitragen ^^

Ciao ...