C++ 已添加自定义子组件,但不可见

C++ 已添加自定义子组件,但不可见,c++,xcode,user-interface,juce,C++,Xcode,User Interface,Juce,我正在使用JUCE框架创建一个音频插件。我创建了一个旋钮类,该类继承自组件类。我的旋钮类包含对滑块和标签的引用 在我的AudioProcessorEditor类中,我初始化了几个旋钮对象。但是,组件在运行时都不可见。我是做错了什么还是漏了一步 我已经尝试直接在我的AudioProcessorEditor类中声明滑块和标签对象。当我这样做时,我能够在运行时成功地看到滑块&标签对象。所以我觉得这个问题涉及到我的旋钮类 旋钮h #pragma一次 #包括“./jucellibrarycode/Juce

我正在使用JUCE框架创建一个音频插件。我创建了一个
旋钮
类,该类继承自
组件
类。我的
旋钮
类包含对
滑块
标签
的引用

在我的
AudioProcessorEditor
类中,我初始化了几个
旋钮
对象。但是,
组件
在运行时都不可见。我是做错了什么还是漏了一步

我已经尝试直接在我的
AudioProcessorEditor
类中声明
滑块
标签
对象。当我这样做时,我能够在运行时成功地看到
滑块
&
标签
对象。所以我觉得这个问题涉及到我的
旋钮

旋钮h
#pragma一次
#包括“./jucellibrarycode/JuceHeader.h”
类:公共组件
{
公众:
旋钮(字符串、音频处理器或编辑器*);
~Knob();
无效绘制(图形和)覆盖;
void resized()覆盖;
字符串名;
标签*KnobLabel;
滑块*旋钮滑块;
音频处理器编辑器*APE;
私人:
JUCE_DECLARE_NON_Copyible_带泄漏检测器(旋钮)
};
旋钮
#包括“旋钮.h”
旋钮::旋钮(字符串名称,AudioProcessorEditor*ape)
{
//在构造函数中,您应该添加任何子组件,并且
//初始化组件需要的任何特殊设置。
此->名称=名称;
猿=猿;
KnobLabel=新标签(名称);
KnobLabel->SetColor(0x1000281,颜色::antiquewhite);
KnobLabel->setAlwaysOnTop(正确);
KnobLabel->setFont(10);
旋钮滑块=新滑块();
旋钮滑块->设置始终在顶部(正确);
addAndMakeVisible(KnobLabel);
添加并使其可见(旋钮滑块);
}
空心旋钮::油漆(图形和g)
{
/*此演示代码只填充组件的背景和
绘制一些占位符文本以开始。
您应该用自己的方法替换此方法中的所有内容
图纸代码。。
*/
g、 设置颜色(颜色:白色);
g、 fillAll();
}
void旋钮::已调整大小()
{
//在这个方法中,您应该设置任何子对象的边界
//组件包含的组件。。
自动边界=getLocalBounds();
KnobSlider->setBounds(bounds.removeFromTop(getHeight()*8));
KnobLabel->收进边界(边界);
}
插件编辑器
#pragma一次
#包括“./jucellibrarycode/JuceHeader.h”
#包括“PluginProcessor.h”
#包括“旋钮h”
#包括“Model.h”
类MoonlightAudioProcessorEditor:公共AudioProcessorEditor
{
公众:
MoonlightAudioProcessor编辑器(MoonlightAudioProcessor&);
~MoonlightAudioProcessorEditor();
无效绘制(图形和)覆盖;
void resized()覆盖;
旋钮*轨道旋钮;
旋钮*空格旋钮;
旋钮*惯性旋钮;
void ConfigureUI();
私人:
自有阵列旋钮;
组件边界约束树脂边界;
ResizebleCornerComponent*Resizer;
MoonlightAudioProcessor&processor;
};
PluginEditor.cpp
#包括“PluginProcessor.h”
#包括“PluginEditor.h”
MoonlightAudioProcessor编辑器::MoonlightAudioProcessor编辑器(MoonlightAudioProcessor&p)
:AudioProcessor编辑器(&p),处理器(p)
{
设置大小(400300);
ConfigureUI();
}
void MoonlightAudioProcessorEditor::ConfigureUI()
{
轨道旋钮=新旋钮(“轨道”,本);
空格旋钮=新旋钮(“空格”,this);
惯性旋钮=新旋钮(“惯性”,本);
旋钮。添加(旋转旋钮);
旋钮。添加(空格旋钮);
旋钮。添加(惯性旋钮);
用于(旋钮*旋钮:旋钮)
{
旋钮->旋钮滑块->添加侦听器(此);
addAndMakeVisible(旋钮);
旋钮->设置始终在顶部(正确);
}
ResizeBounds.setSizeLimits(默认宽度,
默认高度,
最大宽度,
最大高度);
Resizer=新的ResizeBounds组件(此和ResizeBounds);
addAndMakeVisible(调整大小器);
设置大小(处理器宽度、处理器高度);
}
void moonlight音频处理器编辑器::绘制(图形和g)
{
g、 设置颜色(颜色:黑色);
g、 fillAll();
}
void MoonlightAudioProcessorEditor::resized()
{
int width=getWidth();
int height=getHeight();
自动边界=getLocalBounds();
自动图形边界=边界。从顶部移除(高度*.8);
自动轨道边界=边界。从左侧移除(宽度/3);
auto spaceBounds=bounds.removeFromLeft(宽度/3);
if(旋转旋钮!=nullptr)
{
轨道旋钮->设置边界(轨道边界);
}
if(空格旋钮!=nullptr)
{
空格旋钮->收进边界(空格边界);
}
if(惯性旋钮!=nullptr)
{
惯性旋钮->立根(边界);
}
if(Resizer!=nullptr)
{
调整大小->立根(宽度-16,高度-16,16,16);
}
处理器宽度=宽度;
处理器高度=高度;
}


此外,我一直在使用JUCE提供的AudioPluginHost应用程序来测试我的插件。很多时候,应用程序会因分段错误而崩溃。然后我在不做任何更改的情况下重新构建插件,它就会工作。

您在
旋钮::Paint(Graphics&g)
中遗漏了对
组件::Paint(g)
的调用,我最终找到了答案

设置大小后,我的组件正在初始化。很多显示逻辑都在
resize()
函数中,因此我需要在组件初始化后设置大小