TouchGFX小部件在空屏幕上可见
TouchGFX widget visible on empty screen
我正在评估STM32平台之外的TouchGFX工具。一切都很"好",比如与STM32F746G发现板的一些硬件资源的交互,但还有另一个问题。
我创建了一个自定义键盘(如TouchGFX示例所示(,但即使在我进入最后一个屏幕之前,它也会出现在屏幕上。我检查了两个屏幕的View.hpp/.cpp和ViewBase.hp/.cpp,我不知道为什么会是这样。
Screen3View.hpp(键盘应可见的位置(
#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
Screen3View::Screen3View()
{
keyboard.setPosition(16, 16, 400, 240);
add(keyboard);
}
Screen4View.hpp(键盘应不可见(
#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
Screen4View::Screen4View()
{
}
TouchGFX文件的所有其他.cpp都"说"了完全相同的话。只有屏幕3应该有这个键盘,而不是屏幕4。
所以,如果有人知道为什么会这样,请回答。:(
非常感谢。
当您在TouchGFX应用程序中"切换屏幕"时,这个新帧将被渲染到一些帧缓冲区内存中(在解释您所看到的内容时,运行模拟器与具有多个帧缓冲区的目标硬件的复杂性无关(。
当你激活一个什么都不渲染的屏幕(就像Screen4,因为它没有小部件(时,你基本上是在盯着前一帧留下的帧缓冲区的状态(这是带有键盘的Screen3(。想象一下,如果Screen4是你试图渲染的第一个东西,那么你只会看到垃圾/未初始化的内存。
这就是为什么你会看到键盘,即使它甚至不是Screen4的一部分。在Screen4中添加一个覆盖画布全尺寸的框,您将不会再看到以前的帧缓冲区状态。这对任何小部件都是一样的。
如果你把液晶显示器的玻璃比作你家的窗户,通过添加一个盒子,你基本上就是在关上窗户的百叶窗,现在就看不到另一边的"键盘"了。
zrrbyte的回答很好地解释了为什么要面对OP面临的问题。给出的解决方案(在屏幕上强制显示背景图像(有效,但另一种解决方案是用一些颜色填充帧缓冲区。对于STM32F746G-DISCO,您可以按照以下方式进行操作:
Screen4View::Screen4View()
{
HAL::getInstance()->blitFill(0, 0, 0, 480, 272, 255);
}
这将基本上迫使整个LCD充满黑色。
此函数的原型在HAL.cpp:中
virtual void blitFill(colortype color, uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint8_t alpha);
实际上,无论您使用zrrbyte的解决方案还是我的解决方案,都不会有太大区别——两种解决方案的性能相似。
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 最小硬币更换问题(自上而下方法)
- Qt VTK交互风格的信号到小部件
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 使用递归的数组的最小值.这是怎么回事
- 为什么在浮点中从大到小会引入更多的误差
- 找到两对数字,使它们的乘积的绝对差最小化
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 最大和最小 1 C++函数
- 要在屏幕上绘制一些小瓷砖,我应该使用 QQuickItem 还是 QQuickPaintedItem?
- SFML 在屏幕上移动矩形时滞后/小卡顿
- TouchGFX小部件在空屏幕上可见
- Qt,openGL,小部件和屏幕外渲染
- 在屏幕上的确切位置保存和恢复Qt小部件
- C++ 创建小部件数组
- 在单独的线程 Qt 中渲染屏幕外小部件
- OSX以最小的延迟将像素推到屏幕上