跳转到主要内容

QR代码

QR代码是一种能绘制QR代码的控件,其中提供了要编码的内容,并分别为前景和背景指定了颜色。

Note
TouchGFX 设计器画布上显示的预览QR代码为静态示例,始终链接控件文档。

在模拟器或目标上运行应用程序,以查看真实生成的QR代码和用户提供的文本。

在模拟器中运行QR代码

控件组

QR代码位于TouchGFX设计器中的图像控件组中。

在TouchGFX设计器中生成QR代码

TouchGFX设计器中QR代码的属性。

属性组属性说明
名称控件的名称名称是TouchGFX设计器和代码中使用的唯一标识符
位置XY指定控件左上角相对于其母控件的位置。

控件的大小由QR代码版本决定。

锁定指定控件是否应锁定为其当前的X和Y。
如果锁定控件,还会禁止通过屏幕与控件进行交互。

可见指定控件的可见性。 如果将控件标记为不可见,还会禁止通过屏幕与控件进行交互。
配置QR版本指定了从版本1到版本40的QR代码范围。
版本1为21x21“位”。 版本40为177x177“位”。

比例指定了绘制QR代码的比例。

文本指定了QR代码的编码内容。

纠错代码指定了对错误代码字的容忍级别。
外观Alpha 指定控件的透明度。 控件的Alpha值介于0和255之间。 0表示完全透明,255表示纯色

前景指定前景颜色。 默认为黑色。

背景指定背景颜色。 默认为白色。
Mixin可拖动指定在运行时控件是否可拖动。

ClickListener指定控件被点击时是否会调用回调函数。

FadeAnimator指定控件是否可绘制其Alpha值变化的动画。

MoveAnimator指定控件是否可绘制XY值变化的动画。

交互

TouchGFX设计器中的QR代码支持的操作和触发条件。

操作

标准控件动作说明
移动控件在一定时间内将控件移动到新位置。
渐隐控件随时间的推移改变控件的Alpha值。
隐藏控件隐藏控件(将可见性设置为false)。
显示控件使隐藏的控件可见(将可见性设置为true)。

触发条件

QR代码不会产生任何触发条件。

性能

因为像素经过计算,所以QR代码控件的性能比图像慢,但在屏幕上移动或作为简单动画的一部分淡入,其速度足够快。

关于绘制性能的更多细节,请阅读通用UI组件性能章节。

示例

生成代码

在生成的视图基类的代码中,可以查看TouchGFX 设计器是如何设置QR代码的。 缓存在头文件中设置(请参见突出显示的内容)。 缓存用于计算和存储QR代码位值。

Screen1ViewBase.hpp
#ifndef SCREEN1VIEWBASE_HPP
#define SCREEN1VIEWBASE_HPP

#include <gui/common/FrontendApplication.hpp>
#include <mvp/View.hpp>
#include <gui/screen1_screen/Screen1Presenter.hpp>
#include <touchgfx/widgets/Box.hpp>
#include <touchgfx/widgets/QRCode.hpp>

class Screen1ViewBase : public touchgfx::View<Screen1Presenter>
{
public:
Screen1ViewBase();
virtual ~Screen1ViewBase();
virtual void setupScreen();

protected:
FrontendApplication& application() {
return *static_cast<FrontendApplication*>(touchgfx::Application::getInstance());
}

/*
* Member Declarations
*/
touchgfx::Box __background;
uint8_t qrBuffer_qrCode1[QRCODE_BUFFER_SIZE(1)];
uint8_t qrScratchBuffer_qrCode1[QRCODE_BUFFER_SIZE(1)];
touchgfx::QRCode qrCode1;

private:

};

#endif // SCREEN1VIEWBASE_HPP
Screen1ViewBase.cpp
#include <gui_generated/screen1_screen/Screen1ViewBase.hpp>
#include <touchgfx/Color.hpp>

Screen1ViewBase::Screen1ViewBase()
{
qrCode1.setXY(0, 0);
qrCode1.setBuffers(qrBuffer_qrCode1, qrScratchBuffer_qrCode1);
qrCode1.setQRCodeVersion(1);
qrCode1.setScale(5);
qrCode1.convertStringToQRCode("SUPPORT.TOUCHGFX.COM");
add(qrCode1);
}

Screen1ViewBase::~Screen1ViewBase()
{

}

void Screen1ViewBase::setupScreen()
{

}
Caution
如果字符串的长度超过QR代码所能容纳的长度(取决于级别),那么convertStringToQRCode函数可能会失败。

用户应检查函数的返回值。

Tip
可在用户代码中使用这些函数以及QRCode类中提供的其他函数。 如果更改控件的外观,请必须调用qrCode1.invalidate()强制进行重新绘制。

API参考