JUCE学习笔记03-Slider、Listener、Label类

JUCE学习笔记03——Slider、Listener、Label类

知识点:

1、Slider类更多使用
2、Label类基础
3、Listener基础

目标:

Slider类绘制带标签的滑块,并通过Listener响应不同Slider的数值变化

内容:

一、创建GUI内容

创建Slider对象(旋钮),添加至组件

private:
	Slider panDial;
MainComponent::MainComponent()
{
    setSize (600, 400);//窗口大小
	addAndMakeVisible(panDial);
}

设置panDial的滑块样式为旋钮、值为0-127(默认64)、文本框位置及后缀文本

panDial.setSliderStyle(Slider::SliderStyle::Rotary);  //设置Slider样式为旋钮
panDial.setRange(-63, 64, 1);//设置值范围(以声像为例,设置0-127)
panDial.setValue(0, NotificationType::dontSendNotification);//设置默认声像为中心
panDial.setTextBoxStyle(Slider::TextBoxBelow,true,50,20);	//设置旋钮文本框位置
panDial.setTextValueSuffix("C");  //文本框后缀文本

设置旋钮Slider的位置

void MainComponent::resized()
{
	panDial.setBounds(20,20,260,150);   //旋钮位置
}

运行效果:
在这里插入图片描述
创建另一个Slider对象(滑块),添加至组件、设置值范围

 Slider panSlider;//滑块
    Slider panDial; //旋钮
addAndMakeVisible(panSlider);	//添加Slider对象,默认为滑块
panSlider.setRange(-63, 64, 1);	//设置滑块值范围
panSlider.setValue(0, NotificationType::dontSendNotification);//设置默认值
panSlider.setTextBoxStyle(Slider::NoTextBox,true,0,0);//不显示文本框

创建Label对象,设置标签文本并添加至滑块

Label panLabel;
panLabel.setText("Pan", NotificationType::dontSendNotification);//标签文本
panLabel.attachToComponent(&panSlider, true);//附加到滑块

设置滑块位置

void MainComponent::resized()
{
	panDial.setBounds(20,20,260,150);//旋钮位置
	panSlider.setBounds(80, 180, 140, 30);//滑块位置
}

运行效果:
在这里插入图片描述

二、使用Listener类(抽象)实现不同Slider的关联

添加父类 Slider::Listener

 class MainComponent   : public Component,
    	                    public Slider::Listener  

实现Listener类中的sliderValueChanged()方法

//.h文件
void sliderValueChanged(Slider* slider) override;
    //.cpp文件
void MainComponent::sliderValueChanged(Slider * slider)

{
	//关联不同Slider之间的值
	if (slider == &panDial)
	{
		panSlider.setValue(panDial.getValue());		
	}
	else if (slider == &panSlider)
	{
		panDial.setValue(panSlider.getValue());
	}
	
	//声像值改变时变更后缀
	if (panDial.getValue() == 0)
		panDial.setTextValueSuffix(" C");
	else if (panDial.getValue() < 0)
		panDial.setTextValueSuffix(" L");
	else if (panDial.getValue() > 0)
		panDial.setTextValueSuffix(" R");
}

添加listener到组件用于监听滑块与旋钮值的变化

panDial.addListener(this);
panSlider.addListener(this);

完整代码:

//MainComponent.h
#pragma once

#include "../JuceLibraryCode/JuceHeader.h"
*/
class MainComponent   : public Component,
	                    public Slider::Listener
{
public:
    //==============================================================================
    MainComponent();
    ~MainComponent();

    //==============================================================================
    void paint (Graphics&) override;
    void resized() override;
	void sliderValueChanged(Slider* slider) override;

private:

	Slider panSlider;
	Slider panDial;
	Label panLabel;


    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainComponent)
};
    //MainComponent.cpp
    #include "MainComponent.h"
    
    //==============================================================================
    MainComponent::MainComponent()
    {
        setSize (600, 400);
    	
    	addAndMakeVisible(panDial);		
    	panDial.setSliderStyle(Slider::SliderStyle::Rotary);  //设置Slider样式为旋钮
    	panDial.setRange(-63, 64, 1);	//设置值范围(以声像为例,设置0-127)
    	panDial.setValue(0, NotificationType::dontSendNotification);	//设置默认声像为中心
    	panDial.setTextBoxStyle(Slider::TextBoxBelow,true,50,20);		//设置旋钮文本框位置
    	panDial.setTextValueSuffix(" C");
    
    	addAndMakeVisible(panSlider);	//添加Slider对象,默认为滑块
    	panSlider.setRange(-63, 64, 1);	//设置滑块值范围
    	panSlider.setValue(0, NotificationType::dontSendNotification);
    	panSlider.setTextBoxStyle(Slider::NoTextBox,true,0,0);
    	panLabel.setText("Pan", NotificationType::dontSendNotification);
    	panLabel.attachToComponent(&panSlider, true);
    
    	panDial.addListener(this);
    	panSlider.addListener(this);
    }
    
    MainComponent::~MainComponent()
    {
    }
    
    //==============================================================================
    void MainComponent::paint (Graphics& g)
    {
    	
    }
    
    void MainComponent::resized()
    {
    	panDial.setBounds(20,20,260,150);	//旋钮位置
    	panSlider.setBounds(80, 180, 140, 30);//滑块位置
    }
    
    void MainComponent::sliderValueChanged(Slider * slider)
    {
    	//关联不同Slider之间的值
    	if (slider == &panDial)
    	{
    		panSlider.setValue(panDial.getValue());		
    	}
    	else if (slider == &panSlider)
    	{
    		panDial.setValue(panSlider.getValue());
    	}
    	
    	//声像值改变时变更后缀
    	if (panDial.getValue() == 0)
    		panDial.setTextValueSuffix(" C");
    	else if (panDial.getValue() < 0)
    		panDial.setTextValueSuffix(" L");
    	else if (panDial.getValue() > 0)
    		panDial.setTextValueSuffix(" R");
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值