[gelöst] Slot Problem in subclass

Alles rund um die Programmierung mit Qt
Antworten
chom
Beiträge: 24
Registriert: 13. Januar 2012 20:02

[gelöst] Slot Problem in subclass

Beitrag von chom »

Hallo,
Ich konnte mein Problem nicht über google oder Forumssuche lösen, daher meine Frage zu diesem Problem:

Ich habe eine Klasse MainWindow und eine Klasse Convert.
Convert wird in MainWindow(typisch QTcreator) wie folgt benutzt:

Code: Alles auswählen

Funktion(){
Convert mConvert(x,y,z);
mConvert.do();
while(mConvert.getProgress() < 100){
mach was...
}
}
Convert sieht so aus:

Code: Alles auswählen

class Convert : public MainWindow
{
    Q_OBJECT
public:
    explicit Convert(QStringList, QString, short);
    ~Convert();
    void do(void);
    int getProgress();

private:
    QProcess* cProcess;
    int progress;

private slots:
    void Finished();
};
getProgress gibt einfach progress aus (return progress).

Mein Problem jetzt ist, dass Finished niemals aufgerufen wird. Es werden auch keine Fehler ausgegeben, ich merke es nur dadran, dass sich mein Programm aufhängt und ein qDebug in Finished() auch nie ausgegeben wird.

Meine Convert() sieht so aus:

Code: Alles auswählen

cProcess = new QProcess;
connect(this->cProcess, SIGNAL(finished(int)), this, SLOT(Finished()));
Und do() beinhaltet lediglich

Code: Alles auswählen

cProcess->start("xyz");
Also ich weiß, das der QProcess gestartet und abgeschlossen wird (sehe ich an der Ausgabe des gestarteten Prozesses, jedoch wird wie gesagt nie der SLOT Finished geladen, also nie progress = 100 gesetzt.

Danke schon mal :D
MfG,
fer
Zuletzt geändert von chom am 4. Juli 2012 19:47, insgesamt 1-mal geändert.
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Re: Slot Problem in subclass

Beitrag von Troll.Soft »

Code: Alles auswählen

cProcess = new QProcess;
connect(this->cProcess, SIGNAL(finished(int)), this, SLOT(Finished()));
moin,
Dein connect hat inkompatible Aufrufe. Müßte Dir die Debuggerausgabe sagen. Nachprüfen! :) Einmal ein int als Parameter, einmal nichts.
tschüß
Troll.Soft
Scary Hallo

Re: Slot Problem in subclass

Beitrag von Scary Hallo »

@Troll.Soft: So herum ist es erlaubt, nur umgekehrt nicht. (http://qt-project.org/doc/qt-5.0/signal ... -arguments)
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Slot Problem in subclass

Beitrag von franzf »

Es gibt kein SIGNAL finished(int), nur finished(int, QProcess::ExitStatus). Sowas sagt dir aber Qt (Konsolen-Ausgabe IMMER beachten!)
Und bei solchen Sachen kannst du immer auch die Signale stateChanged, error und Konsorten bemühen.
chom
Beiträge: 24
Registriert: 13. Januar 2012 20:02

Re: Slot Problem in subclass

Beitrag von chom »

Danke erst mal für die Antworten.
Ich habe zwischenzeitlich auch mit einem SLOT der ein int erwartet gearbeitet, hat aber auch nicht funktioniert.
franzf hat geschrieben:Es gibt kein SIGNAL finished(int), nur finished(int, QProcess::ExitStatus). Sowas sagt dir aber Qt (Konsolen-Ausgabe IMMER beachten!)
Der QtCreator bietet mir ja automatisch die SIGNALs an wenn ich "SIGNAL(" schreibe, und dort gibt es sowohl finished(int) als auch finished(int, QProcess::ExitStatus).
Also auch wenn ich das zweite nehme, erreicht er nie den SLOT.
Sondern hängt sich einfach auf (keine Reaktion mehr).

MfG

Edit:
PROBLEM GEFUNDEN
Wisst ihr was das Problem war? Guckt mal auf den ersten Post und jetzt ratet mal, richtig, diese besch***ene while-Schleife :evil:
Ich glaube die hat einfach das ganze System lahm gelegt, ist mir aufgefallen, nachdem ich die das ganze etwas umgebaut habe:
- Abgeleitet von QProcess statt von MainWindow (erspart mir eine Deklarationsarbeit)
- Statt dem polling mit getProgress jetzt ein einfaches SIGNAL eingeführt

So einfach kann es sein :wink:
Antworten