JUCE学习笔记01-子组件与Graphics类

JUCE学习笔记01——子组件与Graphics类

一、知识点:

  1. Graphics类的基本用法
  2. 创建并使用子组建

二、目的:

使用GUI应用程序模板,通过创建和添加子组件绘制房子学习Graphics类中基础图形的绘制、了解父子组件

三、内容:

  1. Projucer中创建子组建(.h与.cpp分开,继承自Component类),IDE(VS、XCode等)打开JUCE工程
    在这里插入图片描述
    在这里插入图片描述
  2. 主组建中包含子组建的头文件、创建子组建对象
    在这里插入图片描述
    在这里插入图片描述
  3. 使用Graphics类绘制子组件(wall)——矩形
void WallComponent::paint (Graphics& g)
{
	Rectangle<float> wall(200,150,200, 100);//创建矩形
    g.fillCheckerBoard(wall, 20, 10, Colours::grey, Colours::dimgrey); //使用棋盘填充矩形,模拟墙面
	g.drawRect(wall);	//绘制创建的矩形
}
  1. 在主组件中添加并显示子组件
addAndMakeVisible(wall);
  1. 主组件中设置wall子组件的位置
void MainComponent::resized()
{
	wall.setBounds(getLocalBounds());
}

运行效果:
运行效果

  1. 添加草地(Grass)组件——直线
void GrassComponent::paint (Graphics& g)
{
	g.setColour(Colours::green);  //设置颜色
	g.drawLine(50, 260, getWidth() - 50, 260,20);  //绘制宽为20像素的草坪
}

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

  1. 添加三角形(Roof)屋顶,Graphics类没有直接绘制三角形的方法,所以通过Path类绘制——三角形
void RoofComponent::paint (Graphics& g)
{
	g.setColour(Colours::red);  //设置颜色
	Path p;			    //创建Path对象
	p.startNewSubPath(160, 150);	//绘制起始点	
	p.lineTo(440, 150);		//三角形第二个点
	p.lineTo(300, 100);		//第三个点
	p.closeSubPath();		//封闭路径形成三角形	
	g.fillPath(p);			//填充颜色	
}

运行效果:
在这里插入图片描述
8. 添加阳光(Sun)组件——椭圆

void SunComponent::paint (Graphics& g)
{
	g.drawEllipse(400,50,30,30,0.5);//绘制椭圆
	g.setColour(Colours::yellow);   //设置颜色
	g.fillEllipse(400, 50, 30, 30);  //填充
}

运行效果:
在这里插入图片描述
9. 添加文本子组件(Text)——文本

void TextComponent::paint (Graphics& g)
{
	Font myFont("Gill Sans Ultra Condensed","Ultra Bold",30);//创建字体
	g.setFont(myFont);  //使用字体
	g.setColour(Colours::gold);  //设置颜色
	g.drawText("The Audio Programmer!", 10, 10, 300, 50, Justification::centred);  //绘制文本
}

运行效果:

在这里插入图片描述

四、JUCE工程目录与代码:

在这里插入图片描述

//MainComponent.h
#pragma once

#include "../JuceLibraryCode/JuceHeader.h"
#include "WallComponent.h"
#include "GrassComponent.h"
#include "RoofComponent.h"
#include "SunComponent.h"
#include "TextComponent.h"

class MainComponent   : public Component
{
public:
    //====================================================================
    MainComponent();
    ~MainComponent();

    //====================================================================
    void paint (Graphics&) override;
    void resized() override;

private:
    //====================================================================
    // Your private member variables go here...
	WallComponent wall;
	GrassComponent grass;
	RoofComponent roof;
	SunComponent sun;
	TextComponent text;

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

//=========================================================================
MainComponent::MainComponent()
{
    setSize (600, 400);
	addAndMakeVisible(wall);	//主组件中添加并显示子组件
	addAndMakeVisible(grass);
	addAndMakeVisible(roof);
	addAndMakeVisible(sun);
	addAndMakeVisible(text); 
}
MainComponent::~MainComponent()
{
}
//========================================================================
void MainComponent::paint (Graphics& g)
{
	g.fillAll(Colours::skyblue);		//填充主组件背景色
}

void MainComponent::resized()
{
	wall.setBounds(getLocalBounds());
	grass.setBounds(getLocalBounds());
	roof.setBounds(getLocalBounds());
	sun.setBounds(getLocalBounds());
 	text.setBounds(getLocalBounds());
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值