JUCE学习笔记04-LookAndFeel类自定义Slider颜色

JUCE学习笔记04——LookAndFeel类自定义Slider颜色

知识点:

1.自定义旋钮式Slider的颜色
2.LookAndFeel类基础用法

目标:

使用默认LookAndFeel设置Slider各部分的颜色,自定义LookAndFeel创建Slider的颜色

内容:

一、使用默认LookAndFeel设置Slider的颜色

1.创建两个旋钮样式的Slider,添加到主组件,设置基本属性及位置

private:
	Slider dial1;
	Slider dial2;
  MainComponent::MainComponent()
{
    setSize (600, 400);
	
	addAndMakeVisible(dial1);
	dial1.setSliderStyle(Slider::SliderStyle::Rotary);	//设置Slider样式
	dial1.setTextBoxStyle(Slider::TextBoxBelow, true, 50, 20); //设置文本框
	dial1.setRange(0, 100, 1);				//设置值范围
	dial1.setValue(80);					//设置默认值

	addAndMakeVisible(dial2);
	dial2.setSliderStyle(Slider::SliderStyle::Rotary);   
	dial2.setTextBoxStyle(Slider::TextBoxBelow, true, 50, 20);
	dial2.setRange(-63, 64, 1);
	dial2.setValue(0);
}
{
	//设置Slider显示位置
	int marginX = getWidth() / 20;
	const int marginY = 30;
	int dialWidth = (getWidth() - marginX) / 2;
	int dialHeight = (getWidth() - marginX) / 2;

	dial1.setBounds(marginX, marginY, dialWidth, dialHeight);
	dial2.setBounds(marginX + dialWidth, marginY, dialWidth, dialHeight);
}

运行效果:
在这里插入图片描述
2.使用默认LookAndFeel设置旋钮式Slider手柄(thumb)、背景、填充的颜色

getLookAndFeel().setColour(Slider::thumbColourId, Colours::blue); //设置手柄颜色
getLookAndFeel().setColour(Slider::rotarySliderOutlineColourId, Colours::grey);//设置旋钮数值条背景颜色
getLookAndFeel().setColour(Slider::rotarySliderFillColourId, Colours::yellow);  //设置旋钮填充色

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

二、自定义LookAndFeel类设置Slider的颜色

1.新建LookAndFeel类,继承自LookAndFeel_V4,同样设置手柄、旋钮内外部颜色

class MyLookAndFeel :public LookAndFeel_V4
{
public :
	MyLookAndFeel()
	{
		setColour(Slider::thumbColourId, Colours::white);
		setColour(Slider::rotarySliderOutlineColourId, Colours::grey);
		setColour(Slider::rotarySliderFillColourId, Colours::red);
	}
};

2.创建自定义的LookAndFeel类对象,应用与其中一个Slider旋钮

MyLookAndFeel myLookAndFeel;
dial1.setLookAndFeel(&myLookAndFeel); 

运行效果:(左边为自定义LookAndFeel类的样式,右边默认样式)
在这里插入图片描述
3.注意点:由于自定义的LookAndFeel类对象在父组件删除时不会自动删除,需手动管理,否则关闭应用程序时会产生断点,因此需在组件的析构函数中添加:

MainComponent::~MainComponent()
{
	dial1.setLookAndFeel(nullptr);
}

完整代码:

//MainComponent.h
#pragma once

#include "../JuceLibraryCode/JuceHeader.h"

//==============================================================================
/*
    This component lives inside our window, and this is where you should put all
    your controls and content.
*/
class MyLookAndFeel :public LookAndFeel_V4
{
public :
	MyLookAndFeel()
	{
		setColour(Slider::thumbColourId, Colours::white);
		setColour(Slider::rotarySliderOutlineColourId, Colours::grey);
		setColour(Slider::rotarySliderFillColourId, Colours::red);
	}
};

class MainComponent   : public Component
{
public:
    //==============================================================================
    MainComponent();
    ~MainComponent();
    //==============================================================================
    void paint (Graphics&) override;
    void resized() override;

private:
	Slider dial1;
	Slider dial2;
    MyLookAndFeel myLookAndFeel;

    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainComponent)
};
//MainComponent.cpp
#include "MainComponent.h"

//==============================================================================
MainComponent::MainComponent()
{
    setSize (600, 400);
	
	addAndMakeVisible(dial1);
	dial1.setSliderStyle(Slider::SliderStyle::Rotary);			//设置Slider样式
	dial1.setTextBoxStyle(Slider::TextBoxBelow, true, 50, 20);  //设置文本框
	dial1.setRange(0, 100, 1);									//设置值范围
	dial1.setValue(80);											//设置默认值

	addAndMakeVisible(dial2);
	dial2.setSliderStyle(Slider::SliderStyle::Rotary);   
	dial2.setTextBoxStyle(Slider::TextBoxBelow, true, 50, 20);
	dial2.setRange(-63, 64, 1);
	dial2.setValue(0);

	dial1.setLookAndFeel(&myLookAndFeel);

	/*
	getLookAndFeel().setColour(Slider::thumbColourId, Colours::blue); //设置手柄颜色
	getLookAndFeel().setColour(Slider::rotarySliderOutlineColourId, Colours::grey);//设置旋钮数值条背景颜色
	getLookAndFeel().setColour(Slider::rotarySliderFillColourId, Colours::yellow);  //设置旋钮填充色
	*/
}

MainComponent::~MainComponent()
{
	dial1.setLookAndFeel(nullptr);
}

//==============================================================================
void MainComponent::paint (Graphics& g)
{

}

void MainComponent::resized()
{
	//设置Slider显示位置
	int marginX = getWidth() / 20;
	const int marginY = 30;
	int dialWidth = (getWidth() - marginX) / 2;
	int dialHeight = (getWidth() - marginX) / 2;

	dial1.setBounds(marginX, marginY, dialWidth, dialHeight);
	dial2.setBounds(marginX + dialWidth, marginY, dialWidth, dialHeight);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值