anfängerfrage



  • hi eine frage zu wertübergabe

    ich habe mir eine klasse gebaut in der ich alle eingabewerte eines benutzers sammeln will....bis jetzt wird dort lediglich ein QString zwischen gespeichert

    #include "data.hpp"
    using namespace std;
    void Data::setPlPfad_slot(const QString &pfad) {	
    	plPfad = pfad;
    	cout << plPfad << endl;
    }
    
    QString* Data::getPlPfad(){
    	return &plPfad;
    }
    

    dazu die header datei

    #ifndef DATA_HPP_
    #define DATA_HPP_
    #include <qobject.h>
    #include <string>
    #include <iostream>
    #include <qstring.h>
    using namespace std;
    class Data : public QObject{
    	Q_OBJECT
    	public:
    		Data(){};
    		~Data(){};
    		QString* getPlPfad();
    		void coutpfad();	
    	public slots:
    		void setPlPfad_slot(const QString&);		
    	private:
    		QString plPfad;	
    };
    #endif /*DATA_HPP_*/
    

    in plPfad steht nach einer eingabe in ein textfeld auch was drin....hab ich getestet mit cout << plPfad << endl;

    nun soll dieser pfad anderen classen zur verfügung stehen
    dafür soll getPlPfad() zuständig sein

    #include "playlist.hpp"
    
    using namespace std;
    
    void Playlist::reader_slot(){
    	QString *pfad = data.getPlPfad();
    	cout << *pfad << endl;	
    }
    
    ifndef PLAYLIST_HPP_
    #define PLAYLIST_HPP_
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <qstring.h>
    #include <qobject.h>
    #include "data.hpp"
    using namespace std;
    class Playlist : public QObject{
    	Q_OBJECT
    	public:
    		Playlist(){};
    		~Playlist(){};				
    	public slots:	
    		void reader_slot();
    	private:
    		Data data;	
    };
    #endif /*PLAYLIST_HPP_*/
    

    leider ist der pointer *pfad leer bzw. es wird kein pfad ausgegeben

    was habe ich da falsch gemacht?

    thx für die antworten



  • Man sieht keinen Code in dem Du 'setPlPfad_slot' aufrufst; bzw. welche Variable dort als Parameter übergeben wird.

    Gruß
    Werner



  • hi problem gelöst

    ich hatte in playlist ne instanz von data aufgemacht ...diese enthält natürlich den wert der variable plpfad nicht ..wird ja ne neue angelegt ...ergo kein wert vorhanden

    ich übergebe beim aufruf von playlist in

    #include <qapplication.h>
    #include <qpushbutton.h>
    #include <qlayout.h>
    #include <qlineedit.h>
    #include <qslider.h>
    #include <qlcdnumber.h>
    #include "playlist.hpp"
    #include "player.hpp"
    #include "data.hpp"
    using namespace std;
    int main(int argc, char *argv[])
    {
        QApplication app(argc,argv);
        QWidget *mw = new QWidget();    
    
        QPushButton *q = new QPushButton("Quit", mw);
        QPushButton *p = new QPushButton("Play", mw);
        QPushButton *s = new QPushButton("Stop", mw);
        QLineEdit   *le= new QLineEdit("",mw); 
        QLCDNumber	*volValue = new QLCDNumber(mw);
        QLCDNumber	*posValue = new QLCDNumber(mw);    
        QSlider		*slidevol = new QSlider(mw);
        QSlider		*slidepos = new QSlider(mw);
        slidevol->setOrientation(Qt::Horizontal);
        slidevol->setCaption("Volume");
        slidepos->setOrientation(Qt::Horizontal);
        slidepos->setCaption("Position");
        volValue->setNumDigits(3);
        posValue->setNumDigits(30);
    
        Player *pl = new Player(slidevol,slidepos,volValue);
        Data *data = new Data();
        Playlist *playlist = new Playlist(data);
    
        QObject::connect(q,SIGNAL(clicked()),pl,SLOT(stop_slot()));    
        QObject::connect(q,SIGNAL(clicked()),&app,SLOT(quit()));
        //QObject::connect(p,SIGNAL(clicked()),pl,SLOT(play_slot()));
        QObject::connect(p,SIGNAL(clicked()),playlist,SLOT(reader_slot()));
        QObject::connect(le,SIGNAL(textChanged(const QString&)),data,SLOT(setPlPfad_slot(const QString&)));
        QObject::connect(s,SIGNAL(clicked()),pl,SLOT(stop_slot()));    
        QObject::connect(slidevol,SIGNAL(valueChanged(int)),pl,SLOT(setVolume_slot(int)));    
        QObject::connect(slidepos,SIGNAL(valueChanged(int)),pl,SLOT(setPos_slot(int))); 
        QObject::connect(slidepos,SIGNAL(valueChanged(int)),posValue,SLOT(display(int)));
    
        QVBoxLayout *tl = new QVBoxLayout(mw);
        QHBoxLayout *bl = new QHBoxLayout();
    
        bl->addWidget(q);
        bl->addWidget(p);
        bl->addWidget(s);
        bl->addWidget(le);
        bl->addWidget(slidevol);    
        bl->addWidget(volValue);
        bl->addWidget(slidepos);
        bl->addWidget(posValue);
        tl->addLayout(bl);
    
        mw->setCaption("PlayerGui");
        mw->show(); 
    
        int result = app.exec();
    
        delete q;
        delete p;
        delete s;
        delete le;
        delete slidevol;
        delete slidepos;
        delete tl;
        delete bl;
        delete pl;
        delete playlist;
        delete data;
        delete volValue;
        delete posValue;
    
        return result;
    }
    

    der klasse playlist einen zeiger auf die instanz von data...ergo es wird mit ein und der selben variable gearbeitet

    könnte man plPfad auch static machen? ...dann könnte man doch beliebig viele instanzen aufmachen und die werte sind immer gleich oder?

    grüße


Anmelden zum Antworten