[gelöst]QThread Parameterübergabe

Alles rund um die Programmierung mit Qt
Antworten
Alex66955
Beiträge: 56
Registriert: 23. September 2009 14:48

[gelöst]QThread Parameterübergabe

Beitrag von Alex66955 »

Hallo Community,

Ich habe einen kleinen hänger und komme nicht weiter. Ist eine ganz Simple Sache.

Ich möchte beim erstellen einer Thread Klasse Parameter übergeben.. Über den normalen weg mit einer Methode in der Thread Klasse z.b setSettings und dann die Werte vor dem Thread start übergeben funktioniert nicht --> sprich diese sind dann nach dem start des thread nicht mehr bekannt.


Momentane Implementierung:

Code: Alles auswählen


#ifndef SEARCHVEHICLE_H
#define SEARCHVEHICLE_H

#include <QThread>
#include "vehicle.h"
#include "connectftp.h"

class SearchVehicle : public QThread {
    Q_OBJECT
public:
    SearchVehicle(QMap<QString, QVariant> settings, QWidget *parent=0);
    void run();

    ~SearchVehicle();


private:
    QMap<QString, QVariant> ftpSettings;
    QWidget *parent;
};

#endif // SEARCHVEHICLE_H

Code: Alles auswählen

#include "searchvehicle.h"


void SearchVehicle::run() {
    searchFileInfos();
}

SearchVehicle::SearchVehicle(QMap<QString,QVariant> settings, QWidget* parent) :ftpSettings(settings), parent(parent){

}

void SearchVehicle::searchFileInfos() {
     //ftp settings hier nicht verfügbar
}

Code: Alles auswählen

        QMap<QString, QVariant> ftpSettings;
        ftpSettings["host"] = "dfsdfs";
        SearchVehicle *vehicleSearch = new SearchVehicle(ftpSettings, this);
        vehicleSearch->start(QThread::NormalPriority);
Zuletzt geändert von Alex66955 am 16. August 2010 12:18, insgesamt 1-mal geändert.
RavenIV
Beiträge: 267
Registriert: 21. Januar 2009 14:24
Wohnort: Waldshut

Beitrag von RavenIV »

ganz klar.
Du musst die übergebenen Parameter als Member-Variablen im Konstruktor ablegen. Dann kannst Du auf diese Member-Variablen aus Deiner Klasse zugreifen.
Linux, das längste Text-Adventure aller Zeiten
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

RavenIV hat geschrieben:Du musst die übergebenen Parameter als Member-Variablen im Konstruktor ablegen.
Macht er doch, via Initialisierungsliste.
Das Problem das ich sehe: void SearchVehicle::searchFileInfos() fehlt in der Klassendefinition. Da sollten aber noch andere Meldungen kommen.

Prinzipiell: Keine eigenen Interpretationen posten, sondern die komplette Fehlermeldung des Compilers. Da braucht man dann nicht raten ;)
Alex66955
Beiträge: 56
Registriert: 23. September 2009 14:48

Beitrag von Alex66955 »

Ja hast Recht beim reinkopieren in das Forum Fenster ist das wohl verloren gegangen. Also ist im Sourcecode enthalten und die Applikation lässt sich auch starten.

Code: Alles auswählen

class SearchVehicle : public QThread {
    Q_OBJECT
public:
    SearchVehicle(QMap<QString, QVariant> settings, QWidget *parent=0);
    void run();
    ~SearchVehicle();


private:
    QMap<QString, QVariant> ftpSettings;
    QWidget *parent;

    void searchFileInfos();
};
Das Problem ist ich bekommen keine Fehlermeldung.. Beim durchlauf mit dem Debugger sind die FtpSettings in der SearchVehicle Methode bzw Klasse verfügbar. Jedoch nicht mehr in der searchFileInfos Methode.
Alex66955
Beiträge: 56
Registriert: 23. September 2009 14:48

Beitrag von Alex66955 »

Problem gelöst.
Habe vergessen ein EventLoop einzubauen so hat sich der Thread geschlossen bevor er mit den Parametern arbeiten konnte.( Die Parameter wurden an eine QFtp Klasse weitergegeben die ja wiederum einzelne Thread startet)
Antworten