Hintergrundprozess automatisch entfernen

Alles rund um die Programmierung mit Qt
Antworten
ak24
Beiträge: 7
Registriert: 1. August 2015 10:42

Hintergrundprozess automatisch entfernen

Beitrag 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.
m-obi
Beiträge: 18
Registriert: 14. August 2013 07:46

Re: Hintergrundprozess automatisch entfernen

Beitrag von m-obi »

Versuch mal mit

Code: Alles auswählen

QApplication::quit();
Lange nicht mehr einen gesehen der in denglisch programmiert :D
Gruß m-obi
ak24
Beiträge: 7
Registriert: 1. August 2015 10:42

Re: Hintergrundprozess automatisch entfernen

Beitrag 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.
ak24
Beiträge: 7
Registriert: 1. August 2015 10:42

Re: Hintergrundprozess automatisch entfernen

Beitrag 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
m-obi
Beiträge: 18
Registriert: 14. August 2013 07:46

Re: Hintergrundprozess automatisch entfernen

Beitrag von m-obi »

Also bei mir klappt es immer. Wird irgendwo was nicht deleted?
Gruß m-obi
odt
Beiträge: 128
Registriert: 12. August 2010 11:49
Kontaktdaten:

Re: Hintergrundprozess automatisch entfernen

Beitrag von odt »

poste mal Dein main respektive wo der Dialog aufgerufen wird.
ODT Informatik GmbH, Reto Tschofenig
ak24
Beiträge: 7
Registriert: 1. August 2015 10:42

Re: Hintergrundprozess automatisch entfernen

Beitrag 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.
Zuletzt geändert von ak24 am 10. August 2015 13:59, insgesamt 1-mal geändert.
ak24
Beiträge: 7
Registriert: 1. August 2015 10:42

Re: Hintergrundprozess automatisch entfernen

Beitrag 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.
odt
Beiträge: 128
Registriert: 12. August 2010 11:49
Kontaktdaten:

Re: Hintergrundprozess automatisch entfernen

Beitrag 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();
ODT Informatik GmbH, Reto Tschofenig
ak24
Beiträge: 7
Registriert: 1. August 2015 10:42

[gelöst] Hintergrundprozess automatisch entfernen

Beitrag von ak24 »

Daaaaaaaaaaaaaaaaaaanke,
funktioniert prima!

Gruß
Aaron K.
m-obi
Beiträge: 18
Registriert: 14. August 2013 07:46

Re: Hintergrundprozess automatisch entfernen

Beitrag 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.
Gruß m-obi
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Hintergrundprozess automatisch entfernen

Beitrag 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 ...
Antworten