Wert wird nicht richtig übergeben



  • Wieso kriege ich in der Methode mousePressEvent keine vernüftige Ausgabe ?
    Was mache ich denn falsch ? 😕
    getToolButtonID ist public und toolButtonID ist eine Member Variable von CToolBox die ist private deklariert.

    int CToolBox::getToolButtonID() 
    {
    return (toolButtonID);
    }
    
    void CToolBox::updateToolButtonID(int id)
    {
     toolButtonID=10;
    }
    
    void CDrawArea::mousePressEvent(QMouseEvent *mouse)
    {
    CToolBox s;
    
    printf("ID: %i", s.getToolButtonID());
    }
    

    MFG
    xmarvel



  • was sind denn das für unvernünftige Ausgaben?
    Aber net zufällig daß immer 10 rauskommt oder 😃



  • ne immer unterschiedlichen zahlen das ist ja das komische.
    (10 Habe ich nur reingesetzt zum besseren Verstädnis eigentlich kommt anstatt 10 die Variable id rein.)

    MFG
    xmarvel



  • Wird updateToolButtonID oder eine andere Funktion die die ID verändert denn jemals für dein lokales CToolBox-Objekt innerhalb von CDrawArea::mousePressEvent aufgerufen?! Ich vermute einfach mal nicht.
    Könnte ja nur aus dem KOnstruktor kommen, vielleicht postest du den auch mal



  • kann ich natürlich machen hier der Konstrukter:

    CToolBox::CToolBox(QWidget *parent, const char *name) : QVBox(parent, name)
    {
     toolbox = new QButtonGroup(this, "ToolBox");
     toolbox->setGeometry(20,20,100,200);
     toolbox->setExclusive(true);
     toolbox->setTitle("ToolBox");
     connect(toolbox, SIGNAL(clicked(int)), SLOT(updateToolButtonID(int)));
    
     ...
    }
    

    Also aufgerufen wird die Funktion schon da wenn ich die ID bzw. toolbutton in der Methode updateToolButtonID mittels printf Ausgäbe. Dann bekomme ich die richtigen Ausgaben also 10 oder halt die ID.

    MFG
    xmarvel



  • In der Klassen declaration ist ja nicht zufälligerweise ein Array?



  • nein da ist kein array
    Dann poste ich noch die header datei vielleicht stimmt da ja was nicht wovon ich eigentlich nicht ausgehe

    class CToolBox : public QVBox
    {
    Q_OBJECT
    
    private slots:
    	void updateToolButtonID(int id);
    public:
    	CToolBox(QWidget *parent=0, const char *name=0);
    	int getToolButtonID();
    
            ...
    private:
    	int toolButtonID;
    
    };
    
    class CDrawArea : public QHBox
    {
    public:
    	CDrawArea(QWidget *parent=0, const char *name=0);
    
    private:
    	void mousePressEvent(QMouseEvent *mouse);
    
            ...
    };
    

    Habe jetzt mal nur die relavanten Teile mitangegeben.

    MFG
    xmarvel



  • nach langen hin und her habe ich heraus gefunden das es an der Variable toolButtonID liegt. Wenn ich die ausserhalb der Klasse deklariere Funktioniert es aber wieso ?
    Die Methode der Klasse müsste doch auf die private Variablen ohne Probleme zugreifen können.
    Nur klappt das nicht richtig !
    Wie kann ich die Variable toolButtonID doch noch in die private Deklaration der KLasse bringen sodas die Methoden der Klasse zugreifen könenn ?
    Irgendwie blick ich da nicht mehr durch da es doch garkein Unterschied macht wenn die Methode auf die private Variable der Klasse zugreift oder eben nicht. 😕



  • Ich kenne die Api nicht, die du verwendest. Ich hab aber das Gefühl, daß dein Objekt irgendwo kopiert wird und dann die update-Funktion für das kopierte Objekt aufgerufen wird und somit nicht die id des Orignial-Objektes verändert wird.
    Ich würde dir vorschlagen, das mal zu testen. Also, ob die Funktion für das lokale Objekt in mousePressEvent aufgerufen wird oder für ein anderes.



  • @shady ich glaube du hast recht denn wenn ich im Konstruktor den Wert für die Variable angebe dann bekomme ich den richtigen Wert.
    Also nimmt er das kopierte Objekt.
    Denn das Objekt erzeuge ich mittels:

    CToolBox *toolbox = new CToolBox(&vbox, "ToolBox");
    

    Nur wie kann ich das jetzt umgehen ? Denn ich bräuchte eigentlich eine Kopie vom Objekt.



  • Ich hoffe ich nerve nicht aber irgendwie verzweifele ich an den Problem. 🙄
    Habe jetzt nochmal komplett alles weggeschmiessen und alles nochmal neu geschrieben. Ist aber die selbe Situation wie vorher. Aber der Code ist denke ich mal übersichtlicher:

    drawarea.h

    #include <qwidget.h>
    
    class QDrawArea : public QWidget
    {
    Q_OBJECT
    
    public slots:
    	void setToolButtonID(int id);
    
    public:
    	QDrawArea(QWidget *parent = 0, const char *name = 0);
    
    private:
    	void mousePressEvent(QMouseEvent *mouse);
    
    	int m_toolButtonID;
    
    protected:
    	int getToolButtonID();
    };
    
    class CPaintEvents : public QDrawArea
    {
    public:
    	void freeHand();
    };
    

    und drawarea.cpp

    #include "drawarea.h"
    #include <stdio.h>
    
    QDrawArea::QDrawArea(QWidget *parent, const char *name) : QWidget(parent, name)
    {
     setPaletteBackgroundColor(QColor (255, 255, 255));
    }
    
    void QDrawArea::setToolButtonID(int id)
    {
     m_toolButtonID=id; // Die Zuweisung funktioniert ohne Probleme
    }
    
    int QDrawArea::getToolButtonID()
    {
    printf("getID: %i\n", m_toolButtonID);
    return (m_toolButtonID);
    }
    
    void QDrawArea::mousePressEvent(QMouseEvent *mouse)
    {
    CPaintEvents paint;  // Hier denke denke ich das ein Fehler drinsteckt wird überhaupt jedes mal ein Objekt erstellt ?
     switch (m_toolButtonID)
      {
       case 0: paint.freeHand();
    	  break;
       case 1: getToolButtonID(); // Die Ausgabe funktioniert einwandfrei und es kommen die richtigen Werte raus
    	  break;
       case 2:
    	  break;
      }
    }
    
    void CPaintEvents::freeHand()
    {
    printf("freeHandID: %i\n", getToolButtonID());  // In der Ausgabe kommen nur falsche Werte heraus
    }
    

    Ich hoffe jemand kann mir helfen ich denke mal es ist irgendetwas banales aber ich komme nicht drauf.

    MFG
    xmarvel


Anmelden zum Antworten