Touchgfx 自定义容器之间的交互操作

(一)自定义两个容器

(1)BottonContainer

(2)SetAlarmContainers

(二)把两个容器放在屏幕leadScreen2上

需要实现的交互:

(1)点击容器BottonContainer上的报警限值,弹窗容器SetAlarmContainers。

(2)弹窗容器SetAlarmContainers后,把容器SetAlarmContainers上的内容:"参数设置"和其下面的长方形图片设置为隐藏。

(三)实现步骤:

(1)在容器BottonContainer上增加交互:trigger1

(2)点击"报警限值"图片,发生trigger1, 需要添加代码如下:

BottonContainer.cpp

cpp 复制代码
#include <gui/containers/BottonContainer.hpp>
BottonContainer::BottonContainer():
                 imageClickedCallback(this, &BottonContainer::imageClickHandler)
{
  imageLimit.setClickAction(imageClickedCallback);
	imageAlarm.setClickAction(imageClickedCallback);
	imageWait.setClickAction(imageClickedCallback);
	imageChart.setClickAction(imageClickedCallback);
	imageSet.setClickAction(imageClickedCallback);
}
void BottonContainer::initialize()
{
    BottonContainerBase::initialize();
}
void BottonContainer::imageClickHandler(const Image& image, const ClickEvent& event)
{
	if(&image == &imageLimit)
	{
		emitTrigger1Callback();//调用容器的输出Trigger1
	}
	if(&image == &imageAlarm)
	{
    emitTrigger2Callback();//调用容器的输出Trigger1
	}
	if(&image == &imageWait)
	{
    emitTrigger3Callback();//调用容器的输出Trigger1
	}
	if(&image == &imageChart)
	{
    emitTrigger4Callback();//调用容器的输出Trigger1
	}
	if(&image == &imageSet)
	{
    emitTrigger5Callback();//调用容器的输出Trigger1
	}	
}

BottonContainer.hpp

cpp 复制代码
#ifndef BOTTONCONTAINER_HPP
#define BOTTONCONTAINER_HPP
#include <gui_generated/containers/BottonContainerBase.hpp>
class BottonContainer : public BottonContainerBase
{
public:
    BottonContainer();
    virtual ~BottonContainer() {}
    virtual void initialize();
		void imageClickHandler(const Image& image, const ClickEvent& event);	
protected:
		Callback<BottonContainer, const Image&, const ClickEvent&> imageClickedCallback;
};
#endif // BOTTONCONTAINER_HPP

(2)在容器SetAlarmContainers上增加动作: action2

增加代码如下:

SetAlarmContainers.cpp

cpp 复制代码
 void SetAlarmContainers::action2()//响应来自leadScreen2View的触发事件
{
    //Your code here
	setALarmImageFalse.setVisible(FALSE);//隐藏图片
	textArea1_1.setVisible(FALSE);//隐藏字体
	this->invalidateContent();
}

SetAlarmContainers.hpp

cpp 复制代码
#ifndef SETALARMCONTAINERS_HPP
#define SETALARMCONTAINERS_HPP
#include <gui_generated/containers/SetAlarmContainersBase.hpp>
class SetAlarmContainers : public SetAlarmContainersBase
{
public:
    SetAlarmContainers();
    virtual ~SetAlarmContainers() {}
    virtual void initialize();
		void imageClickHandler(const Image& image, const ClickEvent& event);
		void action2();
protected:
	  Callback<SetAlarmContainers, const Image&, const ClickEvent&> imageClickedCallback;
};
#endif // SETALARMCONTAINERS_HPP

(3)在屏幕leadScreen2上增加交互动作动作,调用 SetAlarmContainers中的action2()函数。

interaction4: 当BottonContainer trigger1 happens, 当容器bottonContainer的触发(trigger1)发生时, 显示容器setAlarmContainers1,同时触发另一个内部交互动作。

interaction5: 当interaction4完成时, 调用容器setAlarmContainers1的成员函数action2()。把容器SetAlarmContainers1上的内容:"参数设置"和其下面的长方形图片设置为隐藏

其自动生成的交互操作代码位于:leadScreen2ViewBase.cpp中

cpp 复制代码
leadScreen2ViewBase::leadScreen2ViewBase() :
    bottonContainer1Trigger1Callback(this, &leadScreen2ViewBase::bottonContainer1Trigger1CallbackHandler)
{
    __background.setPosition(0, 0, 600, 1024);
    __background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
    add(__background);
    bottonContainer1.setXY(0, 886);
    bottonContainer1.setTrigger1Callback(bottonContainer1Trigger1Callback);
    add(bottonContainer1);
    
    setAlarmContainers1.setXY(0, 656);
    setAlarmContainers1.setVisible(false);
    add(setAlarmContainers1);
}

void leadScreen2ViewBase::bottonContainer1Trigger1CallbackHandler()
{
    //Interaction4
    //When bottonContainer1 trigger1 show setAlarmContainers1
    //Show setAlarmContainers1
    setAlarmContainers1.setVisible(true);
    setAlarmContainers1.invalidate();

    //Interaction5
    //When Interaction4 completed call action2 on setAlarmContainers1
    //Call action2
    setAlarmContainers1.action2();
}

leadScreen2ViewBase.hpp

cpp 复制代码
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#ifndef LEADSCREEN2VIEWBASE_HPP
#define LEADSCREEN2VIEWBASE_HPP
#include <gui/common/FrontendApplication.hpp>
#include <mvp/View.hpp>
#include <gui/leadscreen2_screen/leadScreen2Presenter.hpp>
#include <touchgfx/widgets/Box.hpp>
#include <gui/containers/BottonContainer.hpp>
#include <gui/containers/SetAlarmContainers.hpp>
class leadScreen2ViewBase : public touchgfx::View<leadScreen2Presenter>
{
public:
    leadScreen2ViewBase();
    virtual ~leadScreen2ViewBase();
    virtual void setupScreen();
    virtual void handleKeyEvent(uint8_t key);
protected:
    FrontendApplication& application() {
        return *static_cast<FrontendApplication*>(touchgfx::Application::getInstance());
    }
    touchgfx::Box __background;
    touchgfx::Box box2;
    BottonContainer bottonContainer1;
    SetAlarmContainers setAlarmContainers1;
private:
    touchgfx::Callback<leadScreen2ViewBase> bottonContainer1Trigger1Callback;
    void bottonContainer1Trigger1CallbackHandler();
};
#endif // LEADSCREEN2VIEWBASE_HPP
相关推荐
深圳老胡4 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
女神下凡4 天前
嵌入式设计的各种存储芯片的硬件/软件设计规范,非常全面。
arm开发·单片机·嵌入式硬件
开发笔记-阿牛4 天前
蓝牙音乐灯拆解,又一次拆到蓝牙音乐灯芯片CK6865L
人工智能·单片机·嵌入式硬件·音视频·音频
从零开始的嵌入式之旅4 天前
day47
arm开发·经验分享·笔记·嵌入式硬件
恒锐丰科技林技术员4 天前
EG1164 高压大电流升压同步整流芯片解析
经验分享·嵌入式硬件·硬件工程
CHENKONG_CK4 天前
破解制鞋打磨痛点:RFID赋能去毛刺工序自动化升级
网络·单片机·嵌入式硬件·网络协议·tcp/ip
祖力554 天前
ARM时钟
嵌入式硬件·arm·时钟·imx6ull
三佛科技-187366133974 天前
128KB~512KB Flash车规级MCU选型指南(FT32A072 / FT32A103 系列)
单片机·嵌入式硬件
Brilliantwxx5 天前
【STM32】 SPI Flash 驱动开发实战:阻塞模式驱动 W25Q64(含工程代码)
开发语言·stm32·单片机·嵌入式硬件
老当益壮梁奶奶5 天前
ARM汇编学习笔记(六):【i.MX6ULL】时钟系统与定时器(EPIT & GPT)
c语言·arm开发·嵌入式硬件·学习·51单片机