首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TouchGFX小部件在空屏幕上可见

TouchGFX小部件在空屏幕上可见
EN

Stack Overflow用户
提问于 2019-11-14 10:36:48
回答 2查看 1.2K关注 0票数 1

我正在评估除了STM32 32平台之外的TouchGFX工具。一切都“很好”,就像STM32F746G-Discoveryboard与一些硬件资源的交互一样,但还有另一个问题。

我创建了一个自定义键盘(如TouchGFX示例中所示),但即使在进入最后一个屏幕之前,它应该是可见的,它出现在前面的屏幕上。我检查了两个屏幕的View.hpp/..cpp和ViewBase.hpp/..cpp,我不知道为什么会这样。

Screen3View.hpp (键盘应该是可见的)

代码语言:javascript
复制
#ifndef SCREEN3VIEW_HPP
#define SCREEN3VIEW_HPP

#include <gui_generated/screen3_screen/Screen3ViewBase.hpp>
#include <gui/screen3_screen/Screen3Presenter.hpp>
#include <gui_generated/screen3_screen/Screen3ViewBase.hpp>
#include <gui/screen3_screen/Screen3Presenter.hpp>
#include <gui/common/CustomKeyboard.hpp>
#include <touchgfx/widgets/ButtonWithLabel.hpp>

class Screen3View : public Screen3ViewBase
{
public:
    Screen3View();
    virtual ~Screen3View() {}
    virtual void setupScreen();
    virtual void tearDownScreen();
protected:

    CustomKeyboard keyboard;

};

#endif // SCREEN3VIEW_HPP

Screen3View.cpp

代码语言:javascript
复制
Screen3View::Screen3View()
{
    keyboard.setPosition(16, 16, 400, 240);
    add(keyboard);
}

Screen4View.hpp (键盘应该是而不是是可见的)

代码语言:javascript
复制
#ifndef SCREEN4VIEW_HPP
#define SCREEN4VIEW_HPP

#include <gui_generated/screen4_screen/Screen4ViewBase.hpp>
#include <gui/screen4_screen/Screen4Presenter.hpp>

class Screen4View : public Screen4ViewBase
{
public:
    Screen4View();
    virtual ~Screen4View() {}
    virtual void setupScreen();
    virtual void tearDownScreen();
protected:
};

#endif // SCREEN4VIEW_HPP

Screen4View.cpp

代码语言:javascript
复制
Screen4View::Screen4View()
{

}

所有other.cpp的TouchGFX文件“说”完全一样的事情。仅屏幕3应该有这个键盘,而不是屏幕4太。

所以,如果有人知道为什么会这样,请回答。:)

非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-14 13:01:07

当您在TouchGFX应用程序中“切换屏幕”时,这个新帧将呈现到某些帧缓冲区内存中(在解释所看到的内容时,运行模拟器与具有多个帧缓冲区的目标硬件的复杂性是无关的)。

当您激活一个不呈现任何内容的屏幕时(比如Screen4,因为它没有小部件),基本上是盯着前一个框架(即带有键盘的Screen3 )留下的帧缓冲区的状态。想象一下,如果Screen4是您尝试呈现的第一件事,那么您只会看到垃圾/未初始化的内存。

这就是为什么你会看到一个键盘,即使它甚至不是Screen4的一部分。向Screen4添加一个方框,覆盖画布的全部维度,您就不会再看到以前的framebuffer状态了。这对于任何小部件来说都是一样的。

如果你把液晶显示器的玻璃和你房子里的窗户做比较,通过添加一个盒子,你基本上就是关闭了那个窗口的百叶窗,现在不能看到另一边的“键盘”了。

票数 3
EN

Stack Overflow用户

发布于 2020-04-12 11:28:42

Zrr字节的回答很好地解释了为什么要面对OP所面临的问题。给出的解决方案(强制在屏幕上显示背景图像)可以工作,但另一种解决方案是用某种颜色填充帧缓冲区。对于STM32F746G-迪斯科,您可以这样做:

代码语言:javascript
复制
Screen4View::Screen4View()
{
    HAL::getInstance()->blitFill(0, 0, 0, 480, 272, 255);
}

这基本上会迫使整个液晶显示器充满黑色。

此函数的原型在HAL.cpp中:

代码语言:javascript
复制
virtual void blitFill(colortype color, uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint8_t alpha);

实际上,无论您使用zrr字节的解决方案还是使用我的解决方案,都不会有太大的区别--这两种解决方案的性能是相似的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58854742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档