Flythings学习(二)控件相关
文章目录
- 1 前言
- 2 通用属性
- 2.1 控件ID值
- 2.2 控件位置
- 2.3 背景色
- 2.4 背景图
- 2.5 显示与隐藏
- 2.6 控件状态
- 2.7 蜂鸣器控制
- 3 文本类TextView
- 4 按键类 Button
- 4.1 系统按键
- 4.2 处理按钮长按事件
- 4.3 处理按键触摸事件
- 5 复选框CheckBox
- 6 单选组 RadioGroup
- 7 进度条,滑块
- 7.1 如何控制滑块的进度
- 8 指针仪表控件
- 9 列表控件
- 9.1 设置列表项的显示内容
- 9.2 设置列表子项的显示内容
- 10 编辑框
- 11 窗口
- 12 滑动窗口
1 前言
本系列笔记根据flythings官方文档进行学习,连接如下,相关下载在文档中的环境安装部分
https://developer.flythings.cn/zh-hans/
2 通用属性
2.1 控件ID值
ID值作为控件的唯一标识,每一个FTU文件里的控件ID值是不允许重名的,不同的ftu文件里的控件ID值允许重名;设置id后,编译完全会在activity目录下对应的头文件中生成相应的宏定义
所有控件都能使用
/*** 该接口定义于控件基类ZKBase中* 头文件位置: include/control/ZKBase.h** 注意: 以下接口如未特殊说明,都表示定义在ZKBase类中* 所有控件直接或间接的继承了ZKBase类,所以,所有的控件都可以调用ZKBase类中public接口*/
int getID() const;/* 操作样例: 点击按钮控件,打印该控件ID值 */
static bool onButtonClick_Button1(ZKButton *pButton) {int id = pButton->getID();LOGD("onButtonClick_Button1 id %d\n", id);return false;
}
2.2 控件位置
// 设置位置
void setPosition(const LayoutPosition &position);
// 获取位置
const LayoutPosition& getPosition();
样例
/* 操作样例 */
// 点击按钮控件,设置该按钮位置
static bool onButtonClick_Button1(ZKButton *pButton) {// 左:0,上:0,宽:100,高:200LayoutPosition pos(0, 0, 100, 200);pButton->setPosition(pos);return false;
}// 点击按钮控件,获取该按钮位置
static bool onButtonClick_Button2(ZKButton *pButton) {// pos的mLeft、mTop、mWidth、mHeight变量分别对应的就是坐标值LayoutPosition pos = pButton->getPosition();return false;
}
2.3 背景色
/*** Z6、Z11、A33平台接口定义* color为-1时,背景设置为透明;其他颜色值为0x RGB,颜色值不支持alpha*/
void setBackgroundColor(int color);/*** H500S、Z20、Z21及以后平台接口定义* color 颜色值为0x ARGB,支持alpha*/
void setBackgroundColor(uint32_t color);/* 操作样例: 点击按钮控件,设置背景颜色为红色 */
static bool onButtonClick_Button1(ZKButton *pButton) {pButton->setBackgroundColor(0xFFFF0000);return false;
}
2.4 背景图
/*** pPicPath参数可以有以下两种方式:* 1. 绝对路径,如:"/mnt/extsd/pic/bg.png"* 2. 相对资源目录路径,只需把图片放到项目工程resources目录下,编译打包后,就可以使用了,如resources目录下有bg.png图片,只需设置"bg.png"即可*/
void setBackgroundPic(const char *pPicPath);/* 操作样例 */
mButton1Ptr->setBackgroundPic("/mnt/extsd/pic/bg.png"); // 设置绝对路径
mButton1Ptr->setBackgroundPic("bg.png"); // 设置resources目录下bg.png图片
2.5 显示与隐藏
void setVisible(bool isVisible);
bool isVisible() const;
/* 操作样例 */
mButton1Ptr->setVisible(true); // 显示按钮控件
mButton1Ptr->setVisible(false); // 隐藏按钮控件/*** 窗口控件还可以使用下面的接口,功能一样* 头文件位置: include/window/ZKWindow.h*/
void showWnd(); // 显示窗口
void hideWnd(); // 隐藏窗口
bool isWndShow() const; // 窗口是否显示/* 操作样例 */
mWindow1Ptr->showWnd();
mWindow1Ptr->hideWnd();
2.6 控件状态
// 设置选中状态
void setSelected(bool isSelected);
bool isSelected() const;/* 操作样例 */
mButton1Ptr->setSelected(true);
mButton1Ptr->setSelected(false);/*** 无效状态作用说明:控件设置为无效状态情况下,触摸控件没有作用,即不响应按下抬起事件*/
// 设置无效状态
void setInvalid(bool isInvalid);
bool isInvalid() const;/* 操作样例 */
mButton1Ptr->setInvalid(true);
mButton1Ptr->setInvalid(false);
2.7 蜂鸣器控制
// 所有控件都支持beep接口,以下为操作样例
mButton1Ptr->beep();// 全局控制蜂鸣器
#include "manager/ConfigManager.h"
// 接口参数说明: true 开启、false 关闭
CONFIGMANAGER->setBeepEnable(true);
3 文本类TextView
通过代码动态更新文本内容
比如通过点击一个按钮,更新文字内容
static bool onButtonClick_Button1(ZKButton *pButton) {mTextView1Ptr->setText("Hello World");return false;
}/* 操作样例 */
mTextView1Ptr->setText(123); // TextView1控件将显示"123"字符串
mTextView1Ptr->setText('c'); // TextView1控件将显示'c'字符
修改文字颜色大小等,可以通过控件更改,也可以通过代码更改
//将控件TextView1 设置为无效状态;如果属性表中`无效时颜色`属性不为空,则将其设置为指定的颜色,否则无变化。mTextView1Ptr->setInvalid(true);//将控件TextView1 设置为选中状态;如果属性表中`选中时颜色`属性不为空,则将其设置为指定的颜色,否则无变化。mTextView1Ptr->setSelected(true);//将控件TextView1 设置为按下状态;如果属性表中`按下时颜色`属性不为空,则将其设置为指定的颜色,否则无变化。mTextView1Ptr->setPressed(true);//将控件TextView1 设置为红色。mTextView1Ptr->setTextColor(0xFF0000);
4 按键类 Button
在Logic.cc中设计点击函数
static bool onButtonClick_Button1(ZKButton *pButton) {//LOGD(" ButtonClick Button1 !!!\n");return false;
}
4.1 系统按键
除了自己定义的ID值外,按键还保留了两个系统按键值:sys_back 和 sys_home ,从名字上我们大致可以知道它们的功能:返回键 和 Home键 ;点击返回键,界面会回到上一界面,如果进入了多层级的界面,点击Home键可以直接回到主界面(启动界面)。我们只需在按键的属性框中把ID值设置为 sys_back 或 sys_home ,就可以实现相应的功能。
4.2 处理按钮长按事件
这两个默认值是-1,可以进行相应设置
设置属性后,编译,打开对应的Logic.cc文件,在文件顶部,声明class LongClickListenner并继承
ZKBase::ILongClickListener类,实现virtual void onLongClick(ZKBase *pBase)方法
namespace { // 加个匿名作用域,防止多个源文件定义相同类名,运行时冲突//实现长按监听接口class LongClickListener : public ZKBase::ILongClickListener {virtual void onLongClick(ZKBase *pBase) { LOGD("触发长按事件");static int count = 0;char buf[128] = {0};snprintf(buf, sizeof(buf), "长按事件触发次数 %d", ++count);//每次触发长按事件,修改按键的文字mLongButtonPtr->setText(buf);}};}
实例化监听类,设置为静态类型
static LongClickListener longButtonClickListener;
在onUI_init()函数中注册按键长按监听
static void onUI_init(){//注册按键长按监听mLongButtonPtr->setLongClickListener(&longButtonClickListener);}
在onUI_quit()中取消监听
static void onUI_quit() {//取消按键长按监听mLongButtonPtr->setLongClickListener(NULL);}
4.3 处理按键触摸事件
实现监听接口类,继承自ITouchListener
namespace { // 加个匿名作用域,防止多个源文件定义相同类名,运行时冲突// 实现触摸监听接口class TouchListener : public ZKBase::ITouchListener {public:virtual void onTouchEvent(ZKBase *pBase, const MotionEvent &ev) {switch (ev.mActionStatus) {case MotionEvent::E_ACTION_DOWN:mTouchButtonPtr->setText("按下");break;case MotionEvent::E_ACTION_UP:mTouchButtonPtr->setText("抬起");break;default:break;}}};}
实例化监听类,并声明为静态类型
static TouchListener sTouchListener;
在 static void onUI_init() 函数中注册按键触摸监听
static void onUI_init() {//注册按键触摸监听mTouchButtonPtr->setTouchListener(&sTouchListener);}
在static void onUI_quit()函数中取消按键触摸监听
static void onUI_quit() {//取消按键触摸监听mTouchButtonPtr->setTouchListener(NULL);}
5 复选框CheckBox
在拖入复选框后,在对应的Logic.cc中会产生关联函数,当点击控件时,关联函数会被系统调用
当点击控件时,关联函数会被调用
static void onCheckedChanged_Checkbox1(ZKCheckBox* pCheckBox, bool isChecked) {if (isChecked) {//复选框 为 选中状态LOGD("选中");} else {//复选框 为 未选中状态LOGD("未选中");}
}
pCheckBox是该控件
isChecked时是否选中状态
6 单选组 RadioGroup
多个选项只能选择一个选项,组中选项的ID能在Activity.h中看到
在logic.cc中会自动创建关联函数
static void onCheckedChanged_RadioGroup1(ZKRadioGroup* pRadioGroup, int checkedID) {LOGD("选中项的ID = %d", checkedID);switch (checkedID) {case ID_MAIN_RadioButton1:LOGD("第一项被选中");break;case ID_MAIN_RadioButton2:LOGD("第二项被选中");break;case ID_MAIN_RadioButton3:LOGD("第三项被选中");break;default:break;}}
checkedID是被选中的选项的ID
7 进度条,滑块
要准四张图片资源,分别是
背景图
有效图
滑块
滑块按下
7.1 如何控制滑块的进度
添加ui后,编译会自动添加在对应的.cc文件中
当进度条改变时,会自动调用函数
static void onProgressChanged_XXXX(ZKSeekBar *pSeekBar, int progress) {//LOGD("XXXX滑块的进度值变化为 %d !\n", progress);
}
设置滑块当前进度
//将滑块进度设置为28
mSeekbarPtr->setProgress(28)
获得滑块的当前进度
int progress = mSeekbarPtr->getProgress();
LOGD("当前滑块的进度值为 %s", progress);
8 指针仪表控件
需要两个图片资源,背景图和指针图片
通过代码设置指针的旋转角度
//将指针调整到90度
mPointer1Ptr->setTargetAngle(90.0);
9 列表控件
需要插入两个东西,一个是列表,一个是列表子项
有三个函数,在第一章讲过
int getListItemCount_ListView1(): 获取将要绘制列表的长度
例如: 要显示的数据有100条, 那么就返回100。
void obtainListItemData_List1: 具体设置列表每一项的显示内容 具体例子参见后续文档 以上两个函数共同控制着列表的显示内容。更具体的函数调用流程。
onListItemClick_List1: 列表控件的点击事件 当点击列表中的某一项时,系统会调用该函数,参数index 表示 当前被点击列表项的索引值。
9.1 设置列表项的显示内容
列表项,指列表组中的一个列表项中的内容
static void obtainListItemData_ListView1(ZKListView *pListView,ZKListView::ZKListItem *pListItem, int index) {//pListItem指针表示列表项, 该指针只能在这个函数内当中使用char buf[32] = {0};//参数index表示 当前绘制的是列表的第几项,从0开始。//这里,我们将index值格式化到字符串中snprintf(buf, sizeof(buf), "第%d项", index);//将字符串作为文字显示到列表项区域pListItem->setText(buf);//如果你在ui文件中,已经配置好了 列表项 "选中时的图片“,//那么,通过以下这行代码设置列表项的选中状态,即可控制列表项显示对应状态的图片pListItem->setSelected(true);
}
9.2 设置列表子项的显示内容
列表项中的列表子项
static void obtainListItemData_ListView1(ZKListView *pListView,ZKListView::ZKListItem *pListItem, int index) {char buf[32] = {0};//参数index表示 当前绘制的是列表的第几项,从0开始。//这里,我们将index值格式化到字符串中snprintf(buf, sizeof(buf), "第%d项的第一个子项", index);//我们可以通过findSubItemByID()函数以及列表子项的ID,得到列表子项的指针//与pListItem指针相同,查找得到的列表子项指针也只能在这个函数内当中使用ZKListView::ZKListSubItem* subitem1 = pListItem->findSubItemByID(ID_MAIN_SubItem1);if (subitem1 != NULL) {//设置列表子项1的文字subitem1->setText(buf);}snprintf(buf, sizeof(buf), "第%d项的第二个子项", index);ZKListView::ZKListSubItem* subitem2 = pListItem->findSubItemByID(ID_MAIN_SubItem2);if (subitem2 != NULL) {//设置列表子项2的文字subitem2->setText(buf);}
}
10 编辑框
一个可供输入的编辑框
获得模拟键盘的输入内容
static void onEditTextChanged_XXXX(const std::string &text) {//LOGD("当前输入的内容为 %s \n", text.c_str());
}// 获得字符串
const char* str = text.c_str();// 字符串转换为数字static void onEditTextChanged_EditText1(const std::string &text) {
int number = atoi(text.c_str());
LOGD("字符串转为数字 = %d", number);
}static void onEditTextChanged_EditText1(const std::string &text) {
// atof函数可以将字符串转为对应的浮点数,比如 “3.14” 可以转为整形 3.14
//如果参数不规范,会造成转换失败,统一返回 数字 0
double f = atof(text.c_str());
LOGD("字符串转为浮点数 = %f", f);
}
```cpp
11 窗口
界面中可以出现多个窗口
窗口中可以添加其他组件并自定义大小和位置
一般来说,通过触摸滑动来上下翻页,但也有相应函数
// 切换到下一页,有动画
mPageWindow1Ptr->turnToNextPage(true);
// 切换到下一页,无动画
mPageWindow1Ptr->turnToNextPage(false);// 切换到上一页,有动画
mPageWindow1Ptr->turnToPrevPage(true);
// 切换到上一页,无动画
mPageWindow1Ptr->turnToPrevPage(false);
监听翻刀了第几页
namespace { // 加个匿名作用域,防止多个源文件定义相同类名,运行时冲突// 实现自己的监听接口class MyPageChangeListener : public ZKPageWindow::IPageChangeListener {public:virtual void onPageChange(ZKPageWindow *pPageWindow, int page) {LOGD("当前切换到第%d页", page);}};}// 定义监听对象static MyPageChangeListener sMyPageChangeListener;static void onUI_init() {mPageWindow1Ptr->setPageChangeListener(&sMyPageChangeListener);}// 获取当前是第几页
int i = mPageWindow1Ptr->getCurrentPage();
LOGD("当前是第%d页", i);
滚动窗口类似于手机主界面上下或者左右滚动的界面效果
由一个滚动窗口、一个窗口和多个控件组成
12 滑动窗口
滑动窗口中的图标会自行进行排列,也可以手动调整间距等属性
代码操作
// 切换到上一页,有动画
mSlideWindow1Ptr->turnToPrevPage(true);
// 切换到上一页,无动画
mSlideWindow1Ptr->turnToPrevPage(false);// 切换到下一页,有动画
mSlideWindow1Ptr->turnToNextPage(true);
// 切换到下一页,无动画
mSlideWindow1Ptr->turnToNextPage(false);
namespace { // 加个匿名作用域,防止多个源文件定义相同类名,运行时冲突// 实现自己的监听接口class MySlidePageChangeListener : public ZKSlideWindow::ISlidePageChangeListener {public:virtual void onSlidePageChange(ZKSlideWindow *pSlideWindow, int page) {LOGD("当前切换到第%d页", page);}};}// 定义监听对象static MySlidePageChangeListener sMySlidePageChangeListener;static void onUI_init() {mSlidewindow1Ptr->setSlidePageChangeListener(&sMySlidePageChangeListener);}
监听后,可以自己设置点击或长按等相关操作
相关文章:

Flythings学习(二)控件相关
文章目录 1 前言2 通用属性2.1 控件ID值2.2 控件位置2.3 背景色2.4 背景图2.5 显示与隐藏2.6 控件状态2.7 蜂鸣器控制 3 文本类TextView4 按键类 Button4.1 系统按键4.2 处理按钮长按事件4.3 处理按键触摸事件 5 复选框CheckBox6 单选组 RadioGroup7 进度条,滑块7.1…...

关于multiprocessing使用freeze_support()方法
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、freeze_support()?二、使用方法总结 **注意下面** 如果有车载讨论需要的小伙伴,可以私信加我微信,拉你进群,…...

基于rk356x u-boot版本功能分析及编译相关(一)
🎏技术驱动源于热爱,祝各位学有所成。 文章目录 uboot的分支是next-dev历史版本v2017-09uboot支持DM框架uboot前级pre-loader支持及引导下级uboot分区支持uboot支持固件格式secure bootuboot编译脚本位置build.shuboot/make.shrkbin仓库uboot的分支是next-dev历史版本v2017-…...

Jenkins---01
什么是敏捷开发 敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开 发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、 可集成和可运行使用的特征。换言之&…...

第十五届蓝桥杯C++B组省赛
文章目录 1.握手问题解题思路1(组合数学)解题思路2(暴力枚举) 2.小球反弹做题思路 3.好数算法思路(暴力解法)---不会超时 4.R格式算法思路 5.宝石组合算法思路---唯一分解定理 6.数字接龙算法思路----DFS 7…...

线程 vs 虚拟线程:深入理解及区别
Java 提供了两种线程机制:普通线程(平台线程)和 虚拟线程。普通线程是 Java 中经典的并发处理方式,而虚拟线程是随着 Java 21 引入的新特性,旨在提升并发性能和开发体验。本文将详细探讨它们的区别,并帮助你…...

【WEB应用安全测试指南–蓝队安全测试2】--超详细-可直接进行实战!!!亲测-可进行安全及渗透测试
安全基础理论入门知识参考上一篇《WEB应用安全测试指南蓝队安全测试1》 WEB应用安全测试指南2 一、文件 I/O 类1.1、任意文件上传1.2、任意文件下载1.3、文件包含 二、接口安全类2.1、短信炸弹2.2、邮件炸弹2.3、短信内容可控2.4、邮件内容可控 三、逻辑流程类3.1、越权3.2、未…...

使用HTML、CSS和JavaScript创建滚动弹幕效果
使用HTML、CSS和JavaScript创建滚动弹幕效果 在现代网页设计中,滚动文本是一种常见的动态效果,可以吸引用户的注意力并增强交互体验。在这篇博客文章中,我们将详细介绍如何使用HTML、CSS和JavaScript实现滚动文本效果。 效果 步骤1…...

【C语言】--数组
😊个人主页: 起名字真南 😋个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 数组的概念2 一维数组的创建和初始化2.2 数组的初始化2.3 数组类型 3 一维数组的使用3.1 数组下标3.2 数组的输入 4 一维数组在内存中的存储5 sizeof计算数组中的元素6 二维…...

面向B2B市场的Spring Boot医疗病历系统开发
第1章绪论 计算机已经从科研院所,大中型企业,走进了平常百姓家,Internet遍及世界各地,在网上能够用计算机进行文字草拟、修改、打印清样、文件登陆、检索、综合统计、分类、数据库管理等,用科学的方法将无序的信息进行…...

闭着眼学机器学习——支持向量机分类
引言: 在正文开始之前,首先给大家介绍一个不错的人工智能学习教程:https://www.captainbed.cn/bbs。其中包含了机器学习、深度学习、强化学习等系列教程,感兴趣的读者可以自行查阅。 1. 算法介绍 支持向量机(Support Vector Mach…...

今日指数项目day8实战权限管理器(上)
3.权限管理器 3.1 权限列表展示功能 1)原型效果 2)接口说明 功能描述: 查询所有权限集合 服务路径: /api/permissions 服务方法:Get 请求参数:无响应数据格式: {"code": 1,"data":…...

《机器学习与数据挖掘综合实践》实训课程教学解决方案
一、引言 随着信息技术的飞速发展,人工智能已成为推动社会进步的重要力量。作为人工智能的核心技术之一,机器学习与数据挖掘在各行各业的应用日益广泛。本方案旨在通过系统的理论教学、丰富的实践案例和先进的实训平台,帮助学生掌握机器学习…...

linux中软连接和硬链接的区别
定义与概念 硬链接(Hard Link):硬链接是文件系统中的一个概念,它直接指向文件系统中的物理数据块。可以把硬链接看作是原始文件的一个别名,它们共享相同的inode(索引节点)编号。在Linux文件系统…...

#Swift 对比 Static 在Swift 和 OC中的用法
在 Objective-C 和 Swift 中,static 关键字都用于定义类型级别的成员,但它们的用法和行为在两个语言中有所不同。让我们来详细对比一下 Objective-C 和 Swift 中 static 的使用方式和特性。 1. Objective-C 中的 static 在 Objective-C 中,…...

yakit使用教程(三,端口探测和指纹扫描)
本文仅作为学习参考使用,本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言: 前文链接:yakit下载安装教程。 1.端口扫描的作用。 对目标端口进行扫描可以知道目标服务器开启了什么服务,以便于针对其所存在的服务展开…...

一维数组的引用
#define SIZE 5 int main(void) { int i 0; int arr[SIZE] { 86,85,85,896,45 };//同理五个数据只是偶然,可能会更多 //输入 for (i 0;i < SIZE;i) { printf("请输入你的第%d个值:",i1); scanf_s(&…...

Vue3 watch 监视属性
作用:监视数据的变化(和Vue2中的watch作用一致)特点:Vue3中的watch只能监视以下四种数据: ref定义的数据。reactive定义的数据。函数返回一个值(getter函数)。一个包含上述内容的数组。 我们在V…...

大数据-158 Apache Kylin 安装配置详解 集群模式启动
点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…...

PHP商会招商项目系统一站式服务助力企业腾飞
商会招商项目系统——一站式服务,助力企业腾飞 🚀💼 🚀 开篇:企业成长的加速器,商会招商项目系统来袭 在竞争激烈的市场环境中,企业如何快速找到适合自己的发展路径,实现腾飞&…...

pnpm 和 npm
pnpm 和 npm 是 JavaScript 生态系统中常用的包管理工具,它们各自有不同的特性和优缺点。下面是这两者的详细比较: 1. 基本概念 npm (Node Package Manager): 是 Node.js 的默认包管理器,提供安装、更新、卸载 JavaScript 包的功…...

笔试算法总结
文章目录 题目1题目2题目3题目4 题目1 使用 StringBuilder 模拟栈的行为,通过判断相邻2个字符是否相同,如果相同就进行删除 public class Main {public static String fun(String s) {if (s null || s.length() < 1) return s;StringBuilder builde…...

mybatisPlus对于pgSQL中UUID和UUID[]类型的交互
在PGSQL中,有的类型是UUID和UUID[]这种类型,在mybatis和这些类型交互的时候需要手动设置类型处理器才可以,这里记录一下类型处理器的设置 /*** UUID类型处理器*/ public class UUIDTypeHandler extends BaseTypeHandler<UUID> {/*** 获…...

vue3 高德地图标注(飞线,呼吸点)效果
装下这两个 npm 忘了具体命令了,百度一下就行 “loca”: “^1.0.1”, “amap/amap-jsapi-loader”: “^1.0.1”, <template><div id"map" style"width: 100%;height: 100%;"></div> </template><script setup> …...

程序员成长秘籍:是迈向管理巅峰,还是深耕技术架构?
专业在线打字练习平台-巧手打字通,只输出有价值的知识。 一 管理和架构 做技术的同学一般有两条职业发展路径,横向的管理路线和纵向的技术路线。管理路线对应的是管理岗,讲究的是排兵布阵,通过各种资源的优化配置发挥价值。技术路…...

xargs的参数及常用命令
1. xargs 命令简介 xargs 是一个非常有用的工具,它用于从标准输入(stdin)构建和执行命令行。xargs 可以将标准输入中以空格或换行符分隔的数据,转化为命令的参数传递给其他命令。 使用场景: 当某些命令不支持使用管…...

FLASK 数据库建立以及部署和表的创建
首先安装flask-sqlalchemy db SQLAlchemy(app) 一 Mmeber、User模型类的创建 # coding: utf-8 from app import db, appclass Member(db.Model):__tablename__ memberid db.Column(db.Integer, primary_keyTrue)membername db.Column(db.String(100), uniqueTrue, index…...

微信小程序的面试题
简述下 wx.navigateTo(), wx.redirectTo(), wx.switchTab(), wx.navigateBack(), wx.reLaunch() 区别 ? wx.navigateTo() : 保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面 wx.redirectTo() : 关闭当前页面,跳转到应用内的…...

udp c语言实现组播的例子
一、组播与广播的区别 1、组播地址和广播地址是不同的概念 组播地址:用于将数据包发送到一组特定的接收者,只有加入该组播地址的设备才能接收数据。它提高了网络效率,因为发送者只需发送一份数据。 广播地址:用于将数据包发送到…...

ffmpeg面向对象——AVInputFormat与URLProtocol啥关系
《ffmpeg面向对象-rtsp拉流相关对象》和《ffmpeg面向对象——拉流协议匹配机制探索》探索过了输入格式匹配和底层协议匹配,且ffmpeg拉流是先是匹配输入格式——抽象为AVInputFormat类,然后再匹配url协议类——抽象为URLProtocol类。 它们是啥关系&#…...