2017-04-17 3 views
0

Ich habe Mühe, herauszufinden, wie man den ButtonStateChange einer Schaltfläche in der JUCE-Bibliothek richtig überschreibt. Ich möchte ändern, was passiert, wenn eine Taste gedrückt wird. Ich bin ziemlich neu beim Überschreiben, aber ich konnte andere Elemente in der JUCE-Bibliothek erfolgreich überschreiben. Obwohl ich ein Problem mit diesem Thema habe.JUCE-ButtonStateChange/Listener-Probleme überschreiben

1) Ich weiß, dass Sie eine neue Klasse erstellen, vielleicht MyCustomButton, dann 2) Inherit die Klasse, die Sie ändern suchen, Button :: Listener (nicht sicher, ob ich private oder öffentliche Erbschaft tun soll) 3) kopieren und fügen Sie den Code der Funktion ein, die Sie ändern möchten, indem Sie das Schlüsselwort override auf den Prototyp anwenden:

, aber danach bin ich verloren. Ich bin mir nicht sicher, wie ich diese neue Klasse auf eine Schaltfläche anwenden kann, die bereits existiert. Ich weiß, dass ich einen Listener zu einer vorhandenen Schaltfläche im Konstruktor hinzufügen und den Listener im Destruktor der GUI-Komponente entfernen muss, aber ich weiß nicht, wie dieser neue ButtonChangeState-Listener auf eine vorhandene Schaltfläche angewendet werden kann.

Jede Hilfe würde sehr geschätzt werden.

Antwort

2

Sie können eine neue Klasse erstellen, die von einem der Juce der Schaltfläche Klassen erbt (z juce::TextButton) und buttonStateChanged() außer Kraft setzen

class MyCustomButton : public juce::TextButton 
{ 
public: 
    MyCustomButton(); 

protected: 
    void buttonStateChanged() override 
    { 
     // do what you want here 
    } 
}; 

auf Ihre bereits vorhandene Schaltfläche anwenden zu können, nur seine Art zu MyCustomButton ändern.

Alternativ können Sie die Klasse erstellen, in der Sie die Schaltfläche erben von juce::Button::Listener verwenden und die buttonStateChanged(Button*) überschreiben. alles, was Sie dann brauchen, ist den Hörer auf Ihre Taste zu befestigen: „auf Ihre bereits vorhandene Schaltfläche anwenden zu können, nur seine Art zu MyCustomButton ändern“

class MyWindow : public Component, private juce::Button::Listener 
{ 
public: 
    MyWindow() 
    { 
     m_button.addListener(this); 
    } 

    ~MyWindow() 
    { 
     m_button.removeListener(this); 
    } 

private: 
    juce::TextButton m_button; 

    void buttonStateChanged(Button* button) override 
    { 
     if (button == &m_button) 
     { 
      // do what you want 
     } 
    } 
}; 
+0

Dies ist, was ich angenommen habe, aber wie ändere ich den Typ einer Schaltfläche, die vom Projucer erzeugt wird? Ich benutze den grafischen Editor in Projucer. Sicher, ich kann es einfach ändern, aber wenn ich das nächste Mal die Sitzung speichere, denke ich, dass der Projecer es wieder auf den Standard-Button-Typ überschreiben wird. –

+0

Ich habe nie den GUI-Editor von Projucer benutzt, also kann ich dir nicht helfen ... Aber du hast immer noch die zweite Option mit Listeners –