2017-04-17 99 views
0

我很努力地想出如何正確覆蓋JUCE庫中的按鈕的ButtonStateChange。我想改變按鈕被按下時發生的情況。我對覆蓋很陌生,但我已經能夠成功覆蓋JUCE庫中的其他元素。雖然我對這個主題有問題。覆蓋JUCE ButtonStateChange/Listener問題

1)我知道你創建一個新的類,也許MyCustomButton,然後 2)繼承您想修改類,巴頓::監聽器(不知道我應該做的私有或公有繼承) 3)複製並粘貼你想改變的功能的代碼,將覆蓋關鍵字應用到原型,

但在此之後,我迷路了。我不確定如何讓這個新類影響已存在的按鈕。我知道我需要向構造函數中的現有按鈕添加一個偵聽器,並在GUI組件的析構函數中刪除偵聽器,但我仍然不知道如何將這個新的ButtonChangeState偵聽器應用於現有按鈕。

任何幫助將不勝感激。

回答

2

您可以創建一個新的類,它從JUCE的按鈕類之一(例如juce::TextButton)繼承並重寫buttonStateChanged()

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

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

適用於你現有的按鈕,只需將其類型更改MyCustomButton

或者,您可以讓您使用該按鈕的類繼承juce::Button::Listener並覆蓋buttonStateChanged(Button*)。 然後,所有你需要的是監聽器連接到您的按鈕:「適用於你現有的按鈕,只需將其類型更改MyCustomButton」

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

這是我所設想的,但是如何更改由Projucer生成的按鈕的類型?我在Projucer中使用圖形編輯器。當然,我可以改變它,但下一次保存會話時,我認爲Projucer會將它覆蓋回標準按鈕類型。 –

+0

我從來沒有使用過Projucer的GUI編輯器,所以我不能幫你解決這個問題......但你仍然有聽衆的第二個選擇 –