2017-04-17 98 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编辑器,所以我不能帮你解决这个问题......但你仍然有听众的第二个选择 –