重写 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
}
}
};
我正在努力弄清楚如何正确覆盖 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
}
}
};