精华内容
下载资源
问答
  • touchgfx_V4.17官方指导手册,官网不带目录这里我给生成了目录方便查看
  • touchGFX_manual.pdf

    2020-04-09 09:13:34
    TouchGFX 类android效果的stm平台的GUI解决方案,当然也可以移植到其他嵌入式平台上,这个是参考手册,有助于实现自定义的UI界面设计
  • TOUCHGFX快速入门

    2019-01-21 10:06:38
    touchgfx入门教程,最好的gui教程,非常好用,让你做出非常好看的gui
  • TouchGFX用户开发手册

    2018-12-22 01:55:05
    TouchGFX用户开发手册,TouchGFX Designer官方文档,对API的详细描述。
  • touchgfx视频教程

    2021-09-11 08:41:55
    正点原子平台的手把手教你学touchgfx视频教程,讲解的非常到位,干货很多,给大家分享一下视频地址: https://www.yuanzige.com/course/detail/80229 论坛地址: http://www.openedv.com/forum.php?mod=viewthread&...

    正点原子平台的手把手教你学touchgfx视频教程,讲解的非常到位,干货很多,给大家分享一下视频地址:
    https://www.yuanzige.com/course/detail/80229

    论坛地址:
    http://www.openedv.com/forum.php?mod=viewthread&tid=328102&extra=page%3D1

    为了避免周期拉的太长,本视频教程采用周更新的方式,即每一周都会有几节视频更新上传!
    目前已经更新了的视频和配套源码以及配套的资料都已经上传到了原子哥平台
    注1:录制视频不易,因此视频教程是收费的,希望大家理解,你们的支持是我们录制优质教程的动力
    注2:touchgfx教程版块今天正式在正点原子论坛开通了,以后一些资料和交流会在这里进行,大家踊跃发表创意和问题
    注3:关于touchgfx移植的前3讲可以免费试看,视频质量好不好,大家一看便知

    视频教程地址(原子哥平台): https://www.yuanzige.com/course/detail/80229

    综合例程演示地址: https://www.bilibili.com/video/BV1544y127iL
    综合例程的模拟器: 综合例程模拟器(需放在英文目录下运行).zip (4.38 MB, 下载次数: 161)

    视频教程更新日志:

    1.更新了"第7节 实现图片资源存储在外部flash中"
    2.更新了"第8节 编译和一键下载脚本"

    3.完善了综合例程的源代码,并且已经把代码上传到了原子哥平台

    4.更新了"第9节 制作自定义的AT模板"
    5.更新了"第10节 编写外部flash的stldr下载算法(创建工程)"
    6.更新了"第11节 编写外部flash的stldr下载算法(实现接口)"
    7.更新了"第12节 touchgfx的工作机制(MVP架构)"

    8.更新了"第13节 touchgfx的工作机制(内存管理)"
    9.更新了"第14节 touchgfx的启动流程"
    10.更新了"第15节 编写Keil的FLM下载算法"
    11.更新了"第16节 F7和H7用QSPI接口移植touchgfx"
    12.更新了"第17节 F7和H7用QSPI接口移植touchgfx(完成触摸功能)"
    13.更新了"第18节 F7和H7用QSPI接口移植touchgfx(资源存储到外部flash)"
    14.更新了"第19节 编写F7和H7的外部下载算法"
    15.更新了"第20节 一个新的开发板如何快速移植已有的GUI工程(H743综合例程)"
    16.更新了"第21讲 H750移植专讲(QSPI内存映射模式)"
    17.更新了"第22节 F407使用FSMC接口移植MCU屏(STM32CubeMX创建工程)"
    18.更新了"第23节 F407使用FSMC接口移植MCU屏(完成显示和触摸)"
    19.更新了"第24节 F407移植SPI屏"
    本教程中所用的开发环境:
    touchgfx 4.16.0
    STM32CubeMX 6.2.0
    Keil MDK5

    下面截取几张综合例程的效果图,实际效果大家可以下载模拟器体验:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • TouchGFX使用教程

    千次阅读 2020-06-17 11:21:50
    TouchGFX使用教程(一)前言TouchGFX背景TouchGFX工程的结构合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右...

    前言

    大家好,本人最近在做项目开发,项目中使用TouchGFX工具进行开发界面,同时使用stm32系列的芯片操作系统使用的是FreeRTOS,之前没有接触过带有界面开发的stm32,也同样没有接触过TouchGFX界面开发工具,所以在开发过程中也遇见过一些坑,对于开发TouchGFX+stm32+stm32cubeMX有一些体会,给大家展示出来希望有一些作用吧。

    TouchGFX背景

    TouchGFX作为X-Cube-TouchGFX的一个X-Cube软件包提供。
    有了这些,您就可以为基于STM32的硬件完整地实现GUI应用程序。TouchGFX包括三个主要部分-两个工具和一个框架。

    1、TouchGFX Designer:TouchGFX中易于使用的GUI构建器,可让您创建TouchGFX应用程序的视觉外观。
    2、TouchGFX Generator:一个CubeMX插件,用户可以在其中为基于STM32的硬件配置并生成自定义的TouchGFX抽象层(AL)。
    3、TouchGFX引擎:驱动UI应用程序的TouchGFX C ++框架。处理屏幕更新,用户事件和计时。先进的TouchGFX技术针对STM32微控制器进行了优化,以最小的CPU负载和内存使用量为您提供最佳性能。
    在这里插入图片描述
    在这里TouchGFX的安装和入门就不给大家介绍了,从网上任意地方都可以找到。

    TouchGFX工程的结构

    在这里插入图片描述
    在上图中需要注意的是COLOR DEPTH 选项,该部分定义了色彩的位深,所以创建工程时需要根据需要修改该部分的值,个人建议最好时24 bit。其次,如果需要使用官方demo做演示,点击Blank UI框进行选择demo,但是注意的是不知道是网络原因还是服务器本身原因,demo下载不太正常,有时可以正常下载有时却不行,越是大的demo越容易出现问题。当然使用st的官方评测版可在simulator侧直接选择出来。
    在这里插入图片描述
    创建好工程后点击Generate Code按钮可以生成相应的代码,生成的代码可以通过多种方式打开:keil、IAR、STM32CUBEIDE、VS,如果只是做界面逻辑开发的话可以选择VS的IDE,因为VS的IDE可以抽象出UI部分的逻辑,层次感更清晰解耦更彻底。如果需要测试一下界面显示及逻辑则可以用Simulator模式显示。
    在这里插入图片描述
    在TouchGFX界面上点击browse Code按钮则弹出文件夹,有心的朋友可以看一下这些文件夹中放的是些什么,如果创建的是带有硬件平台的上一层的文件夹下还有写驱动及协议层的东西。
    选择simulator文件夹通过VS打开工程,则可以看见TouchGFX界面程序的结构。
    在这里插入图片描述
    现在具体的说一下工程的结构,在工程中包括gui文件夹和generated文件夹,重点说下这两个文件夹下的内容。generated文件夹下放的都是通过TouchGFX生成的文件,如果用VS打开的话,其中的文件是不能更改的,但是用ST的IDE或者IAR之类的工具是可以更改的,本人不建议手动更改其中的内容,因为再次通过TouchGFX生成代码是其中手动更改的内容会被删掉。
    在说一下gui文件夹下的内容吧,在gui文件夹下放着的是每个界面相应产生的子文件夹,同时还包括model文件夹及common、containers、这三个文件夹,model文件夹的作用是TouchGFX特有的结构模式MVP其中的一环,其中的model文件可以通过后台更新前台的数据,也可以通过前台向后台刷新数据。具体后面会给大家做细致的讲解。
    common文件夹中放置的是通用的类文件,如果需要些自定义的算法处理则可以将其放入该文件内。
    containers文件夹上面的图片中没有,但是如果通过TouchGFX创建自定义控件时则会创建该文件。
    具体如何使用后续会给大家做细致的讲解。
    除去上述的文件夹还有由于界面创建产生的文件夹该种文件夹以_screen结尾,此种文件夹中包含两种文件,第一种是包含View的文件,该文件是用于界面的逻辑事件开发,在文件中包含着事件的处理函数。
    第二种是包含Presenter的文件,该文件也是MVP模式中的一类文件,在给大家讲述MVP章节是会给具体的介绍该文件的内容。

    后记

    由于是第一章,主要给大家介绍了TouchGFX的文件结构,方便大家梳理工程逻辑,同时,最重要的是在开发过程中慢慢的体会工程结构。我会把我参考的文章放在下方的链接上,有需要的可以参照。也希望大家有意见和建议的话,在下方留言,本着共同学习,共同发展的目的,之后会细节的给大家介绍一些个人的理解。
    [1]: http://www.waveshare.net/study/portal.php?mod=list&catid=63
    [2]: https://github.com/draupnergraphics/touchgfx-widgets
    [3]: http://www.waveshare.net/study/article-629-1.html

    展开全文
  • TouchGfx入门教程.7z

    2019-05-27 16:06:37
    本文为TouchGfx的入门教程TouchGFX为复杂图形的开发提供了一个可以通过触摸进行控制的框架。
  • TouchGFX学习笔记总结

    2020-10-17 23:35:21
    TouchGFX 是一个在 MCU 上的 UI 框架 支持在超低功耗条件下实现高端的图形和流畅的动画设计, 达到类似 Android 的体验效果。 2018 年华为推出基于 TouchGFX 的 GT Watch。 开发工具 TouchGFX Designer, 基于拖放的...
  • TouchGFX使用教程(六)

    千次阅读 2020-07-09 11:04:38
    TouchGFX使用教程(六)圆环型进度条制作原理制作流程Demo演示 圆环型进度条 制作原理 制作流程 Demo演示

    圆环型进度条

    好久没更新了,之间主要是为了之后的更新在准备一些demo,这期主要给大家介绍一个例子,这个例子很小但是能说明 一些TouchGFX的开发细节。话不多说先上图。
    在这里插入图片描述
    这期主要给大家介绍这个圆环进度条。

    制作原理

    这个 看起来感觉很高大上的进度条,其实组成原理分为几个部分。
    首先先注意下这个界面,这个界面是touchGFX官方提供的demo中的一个画面,其中左侧的滑动栏主要作用是用于切换右侧的界面,这里我们不过多讲解。再看下整体通过touchGFX搭建的界面。
    在这里插入图片描述
    这个界面上并没有圆环的内容,但是右侧有一个底图背景background,这个image定义了界面的主色调,这样开发这个控件时主要的大背景颜色也应该类似,如果跳脱了那就只能说明丑!!!
    既然控件不是通过designer去实现的,那只能说明该部分的内容可变动的地方过于多。所以需要通过代码实现,下面我们想一下这个控件的制作过程。
    首先在touchGFX中制作控件需要有一个类Container,这个类之前提过这里就不过多说明了。重载这个类后需要一个背景图片,还需要一个前景图片,这两个图片的色调要和大背景相互吻合。
    在这里插入图片描述
    背景图
    在这里插入图片描述
    前景图
    除此之外,也需要圆环的部分,第一圆环需要根据百分比的数值进行变动,第二也可以通过手动进行滑动,如果用图片制作那么会加大繁琐程度也不会有太好的效果。这里我们想到touchgfx官方提供的画圆的工具Circle类,这个类继承的是画图及画布的部分,这样就需要一个画出色彩斑斓的画笔去画圆。 那这个画笔的颜色如下图在这里插入图片描述
    通过这个画笔则可以制作出相应的圆环。
    到这里总结下之前的思路,首先需要两个图片一个做前景一个做背景,还有需要一个圆环,一个画笔,其余就是需要滑动事件,及控件窗口。
    到这里有人会问,这么简单就制作一个控件吗,其实大多数控件都可以分解为简单的部分。通过简单的搭建可以做出复杂的效果,千里之行始于足下嘛。下面看下制作流程吧。

    制作流程

    首先创建个控件类。

    class CircularProgress : public Container
    {
    
    }
    

    在类中添加内容

    class CircularProgress : public Container
    {
    public:
    
        CircularProgress();
    
        virtual ~CircularProgress();
    
        int getValue()
        {
            return currentPercentage;
        }
    
        void setBarAngle(int angleInDegrees);
    
        virtual void handleClickEvent(const ClickEvent& evt);
        virtual void handleDragEvent(const DragEvent& evt);
    
    protected:
        static const int END_DEGREE = 116;
        static const int START_DEGREE = -END_DEGREE;
    
        Image background; 背景
        Image centerImage; 前景
    
        Circle bar; 圆环
    #if !defined(USE_BPP) || USE_BPP==16
        PainterRGB565Bitmap bitmapPainter; 画笔
        PainterRGB565 colorPainter;
    #elif USE_BPP==24
        PainterRGB888Bitmap bitmapPainter;
        PainterRGB888 colorPainter;
    #elif defined(LCD8BPP_ABGR2222)
        PainterABGR2222Bitmap bitmapPainter;
        PainterABGR2222 colorPainter;
    #elif defined(LCD8BPP_RGBA2222)
        PainterRGBA2222Bitmap bitmapPainter;
        PainterRGBA2222 colorPainter;
    #elif defined(LCD8BPP_BGRA2222)
        PainterBGRA2222Bitmap bitmapPainter;
        PainterBGRA2222 colorPainter;
    #elif defined(LCD8BPP_ARGB2222) || USE_BPP==8
        PainterARGB2222Bitmap bitmapPainter;
        PainterARGB2222 colorPainter;
    #elif USE_BPP==4
        PainterGRAY4Bitmap bitmapPainter;
        PainterGRAY4 colorPainter;
    #elif USE_BPP==2
        PainterGRAY2Bitmap bitmapPainter;
        PainterGRAY2 colorPainter;
    #else
    #error Unknown USE_BPP
    #endif
    
        TextAreaWithOneWildcard percentageText; 
        Unicode::UnicodeChar percentageTextBuffer[5];
    
        TextArea headlineText;//文字
    
        int currentPercentage;
    
        void updateBar(int newX, int newY); 位置
    };
    

    之后看一下整体的组合。

    CircularProgress::CircularProgress()
    {
        setTouchable(true);
    
        background.setBitmap(Bitmap(BITMAP_CONTROLS_WHEEL_BACKGROUND_ID));
        background.setXY(0, 0);
        add(background);放背景
    
        centerImage.setBitmap(Bitmap(BITMAP_CONTROL_CENTER_BUTTON_ID));
        centerImage.setXY(background.getX() + (background.getWidth() - centerImage.getWidth()) / 2, background.getY() + (background.getHeight() - centerImage.getHeight()) / 2);
        add(centerImage);放前景
    
        bitmapPainter.setBitmap(Bitmap(BITMAP_CONTROL_COLOR_WHEEL_ID)); 设置画笔的图片
        colorPainter.setColor(Color::getColorFrom24BitRGB(0x11, 0x2C, 0x3C), 70);
    
        int radius = 103;
    设置圆环的参数还有画笔
        bar.setPosition(background.getX(), background.getY(), background.getWidth(), background.getHeight());
        bar.setCenter(bar.getWidth() / 2.0f, bar.getHeight() / 2.0f);
        bar.setRadius(radius);
        bar.setLineWidth(25);
        bar.setPainter(bitmapPainter);
        bar.setCapPrecision(15);
        bar.setArc(START_DEGREE, 0);
        add(bar);
    设置中间显示的文字
        Unicode::snprintf(percentageTextBuffer, 5, "%d", 100);
        percentageText.setWildcard(percentageTextBuffer);
        percentageText.setTypedText(TypedText(T_PERCENTAGE_BAR_READOUT));
        percentageText.setXY(background.getX() + (background.getWidth() - percentageText.getWidth()) / 2, background.getY() + (background.getHeight() - percentageText.getHeight()) / 2 - 20);
        percentageText.setColor(Color::getColorFrom24BitRGB(0xFF, 0xFF, 0xFF));
        add(percentageText);
    
        headlineText.setTypedText(TypedText(T_PERCENTAGE_BAR_HEADLINE));
        headlineText.setXY(background.getX() + (background.getWidth() - headlineText.getWidth()) / 2, percentageText.getY() + 60);
        headlineText.setColor(Color::getColorFrom24BitRGB(0x17, 0x3C, 0x51));
        add(headlineText);
    
        setWidth(background.getWidth());
        setHeight(background.getHeight());
    }
    

    修改角度的代码

    void CircularProgress::setBarAngle(int angleInDegrees)
    {
        bar.updateArcEnd((int)angleInDegrees);
    
        currentPercentage = (int)(100.0f * (angleInDegrees + END_DEGREE) / (END_DEGREE - START_DEGREE));
        Unicode::snprintf(percentageTextBuffer, 5, "%d", currentPercentage);
        percentageText.invalidate();
    }
    

    到这里一个控件就展示完了,之后给大家展示下这个控件的使用。

        percentageBar.setXY(background.getX() + (background.getWidth() - percentageBar.getWidth()) / 2, background.getY() + (background.getHeight() - percentageBar.getHeight()) / 2);
        percentageBar.setBarAngle(100);
        percentageBar.setVisible(false);
        add(percentageBar); //圆环
    

    Demo演示

    这里不过多演示,gif图做起来费劲。大家可以把官方demo下载下来看看。

    展开全文
  • TouchGFX使用教程(二)

    千次阅读 2020-06-17 15:48:00
    TouchGFX使用教程(二)通过TouchGFX创建事件逻辑函数Base类中的秘密View类的作用按键事件响应逻辑 通过TouchGFX创建事件逻辑函数 Base类中的秘密 View类的作用 按键事件响应逻辑

    通过TouchGFX创建事件逻辑函数

    TouchGFX Designer中的交互由触发器和动作组成:
    触发器:是由用户点击或者进行其他操作后产生的信号。
    动作:由触发器触发的相应的事件逻辑。

    要添加interaction ,请转到任何屏幕或自定义容器的“interaction”选项卡,然后按下标有“Add Interaction”的蓝色按钮,如下图所示。
    添加交互图片
    添加后界面样子如下:
    在这里插入图片描述
    Trigger中用于添加触发器类型,例如:按钮点击事件。Choose clicked source 中添加被点击的是哪一个按钮,这里显示的是“button1”。
    Action:action的操作分为了两种,第一种是作为基础窗口的动作:
    该种动作包括:

    提供的内容解释
    Call new virtual function调用新的虚函数
    Change screen切换画面
    Execute C++ code执行C ++代码
    Wait for等待

    第二种是控件的属性提供的动作:

    提供的内容解释
    Move widget移动控件
    Fade widget淡入淡出控件
    Hide widget隐藏控件
    Show widget显示控件

    在上图的底部存在Can trigger another interaction的复选框,它的作用是连续动作,当一次触发事件后多次响应其他的事件。

    Base类中的秘密

    在通过TouchGFX Designer创建完界面,并在界面中添加完相应的触发器后,生成的代码中将会存在相应的界面基类,这类代码是由TouchGFX Designer自动生成的,所以不建议更改,在第一章也和大家说过,下面我们探索下这个类中有些什么:
    我们以我写的一个例子做讲解,该demo源码在第一张中可下载。看下图在这里插入图片描述
    我们以MainWindow窗口作为例子讲解窗口基类中有哪些东西,首先窗口的名字叫做“MainWindow”,其中包含和三个按钮及一个text area还有一张背景图片Backimage。放置的顺序不同在界面上体现的层次感不同,如果将背景图片放在最上层的话其他按钮都将被盖在下面。其次看右侧的interaction,在其中我添加了三个逻辑,类型都是按钮的点击事件对应的是三个按钮,相应的功能是“Call new virtual function”,在下方写了函数的名字。注意函数名字和控件的名字,此时,点击Generate Code 按钮后在VS中打开工程。可以看到在头文件和源文件中generated/gui_generated文件夹下有mainwindow_screen文件夹存在,在该文件夹下将存在该界面的基类。如下图:
    在这里插入图片描述
    我们看下该类中的头文件:

    /*********************************************************************************/
    /********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
    /*********************************************************************************/
    #ifndef MAINWINDOWVIEWBASE_HPP
    #define MAINWINDOWVIEWBASE_HPP
    
    #include <gui/common/FrontendApplication.hpp>
    #include <mvp/View.hpp>
    #include <gui/mainwindow_screen/MainWindowPresenter.hpp>
    #include <touchgfx/widgets/ScalableImage.hpp>
    #include <touchgfx/widgets/ButtonWithLabel.hpp>
    #include <touchgfx/widgets/TextAreaWithWildcard.hpp>
    #include <touchgfx/widgets/Button.hpp>
    
    class MainWindowViewBase : public touchgfx::View<MainWindowPresenter>
    {
    public:
        MainWindowViewBase();
        virtual ~MainWindowViewBase() {}
        virtual void setupScreen();  窗口创建时响应的函数
    
        /*
         * Virtual Action Handlers
         */
        virtual void setBackImageIMG() 这个就是在TouchGFX Designer中function name 中填的名字他就是Designer产生的关联性。
        {
            // Override and implement this function in MainWindow
        }
    
    protected:
        FrontendApplication& application() {
            return *static_cast<FrontendApplication*>(touchgfx::Application::getInstance());
        }
    
        /*
         * Member Declarations
         */
         这部分放的就是界面上控件的名字,也就是说如果想要修改控件的动作或者状态,除了TouchGFX Designer中修改外,也可以通过代码调用定义修改。
        touchgfx::ScalableImage BackImage;  
        touchgfx::ButtonWithLabel ChangeImage;
        touchgfx::TextAreaWithOneWildcard textimageid;
        touchgfx::Button NextView;
        touchgfx::Button ChartARTViewButton;
    
        /*
         * Wildcard Buffers
         */
        static const uint16_t TEXTIMAGEID_SIZE = 3;
        touchgfx::Unicode::UnicodeChar textimageidBuffer[TEXTIMAGEID_SIZE];
    
    private:
    	这个部分就是 通过TouchGFX Designer中interaction响应的逻辑,具体的一会在cpp文件中将会看见。
        /*
         * Callback Declarations
         */
        touchgfx::Callback<MainWindowViewBase, const touchgfx::AbstractButton&> buttonCallback;
    
        /*
         * Callback Handler Declarations
         */
        void buttonCallbackHandler(const touchgfx::AbstractButton& src);
    
    };
    
    #endif // MAINWINDOWVIEWBASE_HPP
    
    

    到这里MainWindowViewBase.hpp文件参观完了,可以接下来参观cpp文件了。

    /*********************************************************************************/
    /********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
    /*********************************************************************************/
    #include <gui_generated/mainwindow_screen/MainWindowViewBase.hpp>
    #include "BitmapDatabase.hpp"
    #include <texts/TextKeysAndLanguages.hpp>
    #include <touchgfx/Color.hpp>
    
    MainWindowViewBase::MainWindowViewBase() :
        buttonCallback(this, &MainWindowViewBase::buttonCallbackHandler)
    {
    	在构造函数中可以看见我们添加的控件在cpp文件中体现的样子包括设置图片或者设置位置
        BackImage.setBitmap(touchgfx::Bitmap(BITMAP_IMG1_ID));
        BackImage.setPosition(0, 0, 800, 480);
        BackImage.setScalingAlgorithm(touchgfx::ScalableImage::NEAREST_NEIGHBOR);
    
        ChangeImage.setXY(315, 0);
        ChangeImage.setBitmaps(touchgfx::Bitmap(BITMAP_BLUE_BUTTONS_ROUND_EDGE_SMALL_ID), touchgfx::Bitmap(BITMAP_BLUE_BUTTONS_ROUND_EDGE_SMALL_PRESSED_ID));
        ChangeImage.setLabelText(touchgfx::TypedText(T_SINGLEUSEID1));
        ChangeImage.setLabelColor(touchgfx::Color::getColorFrom24BitRGB(255, 255, 255));
        ChangeImage.setLabelColorPressed(touchgfx::Color::getColorFrom24BitRGB(255, 255, 255));
        ChangeImage.setAction(buttonCallback);这里可以看见添加action方法
    
        textimageid.setPosition(394, 68, 26, 25);
        textimageid.setColor(touchgfx::Color::getColorFrom24BitRGB(255, 0, 0));
        textimageid.setLinespacing(0);
        Unicode::snprintf(textimageidBuffer, TEXTIMAGEID_SIZE, "%s", touchgfx::TypedText(T_SINGLEUSEID3).getText());
        textimageid.setWildcard(textimageidBuffer);
        textimageid.setTypedText(touchgfx::TypedText(T_SINGLEUSEID2));
    
        NextView.setXY(377, 135);
        NextView.setBitmaps(touchgfx::Bitmap(BITMAP_BLUE_BUTTONS_ROUND_ICON_BUTTON_ID), touchgfx::Bitmap(BITMAP_BLUE_BUTTONS_ROUND_ICON_BUTTON_PRESSED_ID));
        NextView.setAction(buttonCallback);
    
        ChartARTViewButton.setXY(377, 230);
        ChartARTViewButton.setBitmaps(touchgfx::Bitmap(BITMAP_BLUE_BUTTONS_ROUND_ICON_BUTTON_ID), touchgfx::Bitmap(BITMAP_BLUE_BUTTONS_ROUND_ICON_BUTTON_PRESSED_ID));
        ChartARTViewButton.setAction(buttonCallback);页面切换的action函数
    在窗口上添加控件方法
        add(BackImage);
        add(ChangeImage);
        add(textimageid);
        add(NextView);
        add(ChartARTViewButton);
    }
    
    void MainWindowViewBase::setupScreen()
    {
    
    }
    
    void MainWindowViewBase::buttonCallbackHandler(const touchgfx::AbstractButton& src)
    {
        if (&src == &ChangeImage)
        {
            //Interaction1
            //When ChangeImage clicked call virtual function
            //Call setBackImageIMG
            setBackImageIMG();这里可以看见是通过callback函数响应的setBackImageIMG函数,由此可以知道以此方法我们可以自己在界面上添加控件,而控件响应的函数也可以这样添加。注意要是自定义添加不要在base文件中添加要在界面类的函数中添加。
        }
        else if (&src == &NextView)
        {
            //Interaction2
            //When NextView clicked change screen to TabView
            //Go to TabView with screen transition towards East
            application().gotoTabViewScreenSlideTransitionEast();
        }
        else if (&src == &ChartARTViewButton)
        {
            //Interaction3
            //When ChartARTViewButton clicked change screen to ChartView
            //Go to ChartView with screen transition towards East
            application().gotoChartViewScreenSlideTransitionEast();
        }
    }
    
    

    由此可以看到创建的界面后,base文件中的状态。下面会给大家展示一下view文件中的内容。

    View类的作用

    view中的内容是可以进行修改的,可以根据需要添加自己的使用方法。
    下面我们再看一下MainWindowView.hpp文件。

    #ifndef MAINWINDOWVIEW_HPP
    #define MAINWINDOWVIEW_HPP
    
    #include <gui_generated/mainwindow_screen/MainWindowViewBase.hpp>
    #include <gui/mainwindow_screen/MainWindowPresenter.hpp>
    
    
    class MainWindowView : public MainWindowViewBase这里看见这个类是继承上方的基类MainWindowViewBase
    {
    public:
        MainWindowView();
        virtual ~MainWindowView() {}
        virtual void setupScreen(); 正常创建时,到此处就没有了。
        下方的文件是手动添加的,如果在界面上创建了function函数,
        则在该文件中添加一样的虚函数,具体在上方的base中能看出来。
        virtual void tearDownScreen();
        virtual void setBackImageIMG();
    protected:
    
    };
    
    #endif // MAINWINDOWVIEW_HPP
    

    此时就可以在cpp文件中添加相应的函数实现了。

    按键事件响应逻辑

    好了说了这么多,我来给大家总结一下吧,通过TouchGFX Designer创建一个界面,在界面中可拖拽控件,在TouchGFX Designer下也可添加相应的action函数,在添加完函数后,要在view文件中加入相应的虚函数。
    除此之外,还可以模仿base文件的方法在界面类中添加相应的button及button的action文件。此章给大家介绍了创建事件的注意示项。

    展开全文
  • TouchGFX Designer是GUI的集成开发环境,所有与界面布局有关的工具都整合到了一起,一共分为4个功能区:画布、图片资源管理、文本资源管理、系统设置。 1、画布 画布是布置UI控件的工作界面,左侧提供了控件栏、屏幕...
  • TouchGFX使用教程(五)

    千次阅读 2020-06-28 13:53:20
    TouchGFX使用教程(五)CanvasWidgetCanvasWidget内存分配TouchGFX Designer中的内存分配用户代码中的内存分配CWR坐标系点、线、面Demo注意 Graph控件是用于实现图表以及需要绘制图像的控件,该控件在TouchGFX ...
  • TouchGFX使用教程(四)

    千次阅读 2020-06-20 11:31:41
    TouchGFX使用教程(四)下拉菜单自定义窗口菜单页高仿IPhone滑动窗口主页面显示多页面滑动 下拉菜单 自定义窗口 菜单页 高仿IPhone 滑动窗口 主页面显示 多页面滑动
  • 基于CubeMX 5.0的TouchGFX移植教程,带截图,有工程代码
  • 在前两个礼拜 TouchGFX 更新了 4.13 版,版本的改动比较大,网上的教程都还只是停 留在早期的版本,早期的移植教程已经不适应于现在版本,这给晚入门的朋友们在移植上带 来很大的不便,所以在第二章介绍了新版本的...
  • Touchgfx用MVP架构将UI界面、界面逻辑、硬件系统三者分离,这是官方例程里的说明: View: 负责描述UI界面,比如包含哪些控件、控件如何布局等,Touchgfx Designer软件里的工作就是在构建View Model: 保存与UI界面...
  • 滚动列表除了没有焦点之外,其余各方面都与滚轮容器一样。...溜了溜了~~ -------------------------------下面是我的小广告---------------------------------------------- 淘宝小店:芯视界touchgfx
  • 前面说过,Model是System和Touchgfx的桥梁,按键控制屏幕的显示主要涉及到,Model如何获取物理按键信息,以及Model如何将信息传递到UI界面,也就是View中某个控件属性里去。 Model获取System信息的方法只有一个:在...
  • Touchgfx现在最新的版本是4.13,CubeMX是5.6,随着版本的迭代,CubeMX与Touchgfx集成度越来越高,用户入门成本也越来越低。Touchgfx可以在所有stm32芯片上运行,但是官方推荐的配置是带有图形专用加速器DMA2D的芯片...
  • Touchgfx STM32+SPI屏显示

    2021-05-21 15:51:02
    Touchgfx STM32+SPI屏显示 首先保证配置好了SPI驱动,能点亮屏幕,显示点、线、正方形等基本图形; 其它的也自行配置好,如CRC、触摸等。 TouchGFX主要配置Iterface为Custom、Application Tick Source为Custom,其它...
  • 4.3寸800x480液晶, 移植了触摸驱动, 工程是cubemx生成的HAL库, 采用kel编辑器 移植了touchgfx
  • STM32F407/405 SPI屏幕+TouchGFX

    千次阅读 2021-01-26 16:05:40
    STM32F407/405 SPI屏幕+TouchGFX 新版的TouchGFX支持部分缓冲帧,只刷新一部分要更新的内容 STM32CubeMX创建工程 创建STM32F405工程,配置好时钟,我使用的是SPI 320*240 屏幕,所以使能SPI2(吐槽一下SPI2比SPI1要...
  • 通过上一节的操作,只用过C语言的同学可能觉得有些囫囵吞枣、消化不良,这一节将介绍C++语言的类、继承、虚函数三个概念,并梳理一下TouchGFX Designer生成的代码的组织结构,方便系统把握Touchgfx的知识点。...
  • TouchGFX之自定义数字键盘
  • TouchGFX使用教程(八)MVP MVP
  • TouchGFX使用教程(七)

    千次阅读 2020-08-31 19:22:31
    TouchGFX使用教程(七)滑动列表 滑动列表
  • TouchGFX使用教程(三)

    千次阅读 2020-06-18 13:31:47
    TouchGFX使用教程(三)界面事件控件修改方法图片等资源放置位置 界面事件 控件修改方法 图片等资源放置位置
  • TouchGFX使用教程(九)动画 动画
  • STM32F469TouchGFX配置.docx

    2019-05-27 19:47:25
    由STM32CubeMX创建的STM32F469的TouchGFX工程,教程由本人试验通过,Keil5工程
  • 基于CUBEMX5.0的Touchgfx移植教程

    千次阅读 2019-02-28 23:36:15
    参考: http://forum.armfly.com/forum.php?mod=viewthread&amp;tid=90710 环境: 步骤: 1、 2、 3、 4、 5、 ...14、返回cubemx打开touchgfx 15、设置界面生成代...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 242
精华内容 96
关键字:

touchgfx教程