重写 JUCE ButtonStateChange / Listener 问题

Overriding JUCE ButtonStateChange / Listener Issues

我正在努力弄清楚如何正确覆盖 JUCE 库中按钮的 ButtonStateChange。我想更改按下按钮时发生的情况。我对覆盖相当陌生,但我已经能够成功地覆盖 JUCE 库中的其他元素。虽然我对此主题有疑问。

1) 我知道您创建了一个新的 class,也许是 MyCustomButton,然后 2)继承你要修改的class,Button::Listener(不确定我应该做私有还是public继承) 3) 复制并粘贴您要更改的函数的代码,将 override 关键字应用于原型,

但在这之后,我迷路了。我不确定如何让这个新的 class 影响一个已经存在的按钮。我知道我需要在构造函数中向现有按钮添加监听器,并在 GUI 组件的析构函数中删除监听器,但我仍然不知道如何将这个新的 ButtonChangeState 监听器应用于现有按钮。

如有任何帮助,我们将不胜感激。

您可以创建一个新的 class,它继承自 Juce 的按钮 class 之一(例如 juce::TextButton)并覆盖 buttonStateChanged()

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

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

要应用于您现有的按钮,只需将其类型更改为 MyCustomButton

或者,您可以使使用按钮的 class 继承自 juce::Button::Listener 并覆盖 buttonStateChanged(Button*)。 然后你所需要的就是将监听器附加到你的按钮:

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
        }
    }
};