Wert zurückbekommen um weiter zu rechnen



  • Hallo,
    mein folgendes problem, ich hab eine qt anwendung die mit einen pushbutton
    werte aus lineedits einliest und auch in die entsprechende lineedits ausgibt.

    Nun brauch ich aber einen der berechneten werte zurück an die klasse, damit ich mit dieser in einem anderen cpp arbeiten kann.

    a.h

    #ifndef A_H
    #define A_H
    
    #include <QDialog>
    
    class A : public QDialog
        {
            Q_OBJECT
        public:
            ui();
            ~ui();
    
        public slots:   
            void button_clicked();
    
        private:
            double x,y,z;
    
    };
    #endif //
    

    a.cpp datei

    #include "a.h"
    
    ui::ui() //Layout etc.
            :QDialog(){...};
    
    ui::~ui(){...};
    
    void A::button_clicked(){
         //...
         x=lineEdit_x->text().toDouble(); //read-in
         y=lineEdit_y->text().toDouble();
    
         z= x +y;
         lineEdit_z->setText(QString::number(z)); //output
    };
    

    ich möchte nun den double wert z zurück in a.h haben damit sie für andere verfügbar ist

    versuch habe ich es mit get/set aber der wert für z dabei rauskommt, stimmt nicht mit dem brechneten z wert überein

    wäre sehr dankbar für eure hilfe



  • Es wäre gut zu sehen, was du da probiert hast. Dann kann man dir vlt. sagen, was da falsch gelaufen ist.

    So wie du das schreibst (irgendwas von "Wert zurück an die Klasse um damit in anderer cpp zu arbeiten"), hätte ich die Befürchtung, dass du auf zwei Instanzen der Klasse arbeitest.



  • also es geht darum, dass mein programm anhand der eingabewerte einen widerstand berechnet und den passenden strom

    mit diesen strom möchte ich dann eine kurve zeichnen welches in einem anderen fenster gemacht werden soll

    also ich habe es mal mit der get/set methoder versucht

    class A : public QDialog
        {
            Q_OBJECT
        public:
       //...
       inline double get_s() const { return z; }
       inline void set_s(double get_s) {z = get_s;}
       //...
        }
    

    aber wenn ich es ausführe und dann den wert überprüfe, stimmt der nicht mit dem berechneten überein



  • Und von wo aus hast du den Getter aufgerufen? Und dann wie damit weiter gerechnet?



  • ich habe es zum testen mal in meine main.cpp getan nur um zu schauen was mir in visual studio der wert c zeigt und der ist halt falsch

    #include "a.h"
    #include <QtWidgets/QApplication>
    int main(int argc, char *argv[])
    {
    	QApplication a(argc, argv);
    	A w,c;
    	w.show();
            double c.get_s();
    	return a.exec();
    }
    


  • Wie befürchtet. Du arbeitest auf 2 Instanzen von deiner Klasse A.

    Einmal hast du

    A w;
    

    und einmal

    A c;
    

    Jetzt rufst du w.show() auf.
    Also wird der Dialog den du in Klasse A implementierst über Instanz w der Klasse A angezeigt.
    Nach dem klick auf dein Button hast du in Instanz w dein z geändert, aber nicht in Instanz c.

    Also versuchs mal mit

    double test=w.get_s();
    


  • ach jetzt seh ich so langsam den fehler

    gut jetzt ist halt die frage
    ich habe in dieser instanz noch ein button der mir wie gesagt in einem neuen qwidget die kurve nun zeichnen soll

    wie bekomme ich den wert aus der dieser instanz auch für die anderen cpp dateien?

    vielen dank schonmal!



  • Ich habe die Befürchtung da liegt ganz viel im Argen, insbesondere was GUI Programmierung anbegeht. [Edit: nicht böse gemeint, aber ich glaube du suchst dir den falschen Startpunkt um programmieren zu lernen]

    Ich habe jetzt schon länger nicht mehr mit QT gearbeitet, aber ich versuche dir ein paar Tipps zu geben.

    Dein "Hauptprogramm" sollte von einer QT Fenster Klasse erben. Ich würde nicht QDialog nehmen, denn das ist die Basisklasse für Dialoge (wie der Name schon sagt). Ich würde z.B. von QWidget erben.

    Daraus machst du dann im Prinzip alles.

    In deinem Beispiel hast du ja in deinem Fenster den Wert gespeichert. Wenn dieses Fenster ein neues Fenster öffnen soll und den Wert weiter verarbeiten soll, steht dem nichts im Wege.

    Hier mal ein QT Tutorial: http://zetcode.com/gui/qt5/firstprograms/
    Und vielleicht solltest du auch noch ein Tutorial/Buch zu objektorientierter Programmierung und C++ durcharbeiten.



  • Überarbeite dein Design. Du weist aus einer höheren Instanz eine Klasse an, Eingaben zu lesen und leitest diese Eingabe an eine weitere zur Ausgabe.

    Der Vorteil ist naheliegend: Der Input kann bei einem solchen Design auch von anderer Stelle kommen bzw. anders verarbeitet werden.


Log in to reply