TinyUI是一套适用于嵌入式的UI库,目前已移植到STM32F103上。
TinyUI支持界面布局,因此,UI组件使用都非常简单,与TUITextView一样,TUIButton使用也非常简单,TUIButton提供了如下API:
/********************************************************************************************************************* @Function: setText @Description: 设置按钮文本 @Param: text: 待显示的文本 @Return: none ********************************************************************************************************************** @History ========================================================================***********************************************************************************************************************/void setText(const char* text);void setText(const string text);void setText(const wchar_t* text);/********************************************************************************************************************* @Function: setFontSize @Description: 设置按钮文本字体大小 @Param: fontSize: 字号 @Return: none ********************************************************************************************************************** @History ========================================================================***********************************************************************************************************************/void setFontSize(int32_t fontSize = 16);/********************************************************************************************************************* @Function: setColor @Description: 设置按钮文本及背景颜色,如果设置了图片,则背景色无效 @Param: foreground: 字体颜色 background: 背景色 @Return: none ********************************************************************************************************************** @History ========================================================================***********************************************************************************************************************/void setColor(color_t foreground = TUICOLORS::BLACK, color_t background = TUICOLORS::SILVER_GRAY);/********************************************************************************************************************* @Function: setImagePath @Description: 设置按钮背景图片,如果设置了图片,则背景色和边框色无效 @Param: normal: 正常状态下的背景图片 pressed: 按下状态下的背景图片 focus: 按钮有焦点时的背景图片 hover: 鼠标悬停/移动时的背景图片 @Return: none ********************************************************************************************************************** @History ========================================================================***********************************************************************************************************************/void setImagePath(string normal, string pressed, string focus = "", string hover = "");/********************************************************************************************************************* @Function: registerListener @Description: 设置按钮事件监听器 @Param: listener: 实现了TUIButtonListener接口的实例 @Return: none ********************************************************************************************************************** @History ========================================================================***********************************************************************************************************************/void registerListener(TUIButtonListener* listener);/********************************************************************************************************************* @Function: setFocusAcceptKeyEvent @Description: 设置只有当其有焦点时才接收按键事件,主要针对嵌入式 @Param: enable: true - 只有当其有焦点时才接收按键事件 false - 任何时候都接收按键事件(前提是绑定了键值) @Return: none ********************************************************************************************************************** @History ========================================================================***********************************************************************************************************************/void setFocusAcceptKeyEvent(bool enable = false);/********************************************************************************************************************* @Function: bindKeycode @Description: 绑定物理按钮对应的虚拟按键值,可以为一个按钮绑定两个按键值 注:嵌入式平台如果没有触摸,而是通过按键触发按钮点击事件时,必须绑定一个键值按钮才能响应。 @Param: primaryCode: 由底层发出的键值(主键) secondaryCode: 由底层发出的键值(次键),即可绑定两个快捷键 @Return: none ********************************************************************************************************************** @History ========================================================================***********************************************************************************************************************/void bindKeycode(TUIVKCode primaryCode = TUIVKCode::TUIVK_ENTER, TUIVKCode secondaryCode = TUIVKCode::TUIVK_INVALID);
使用示例
TUIButton myButton;myButton.registerListener(this); // 注册按钮被点击监听器,一般按钮放在窗口中,则监听器为按钮所处的窗口,窗口需实现TUIButtonListener接口myButton.bindKeycode(TUIVKCode::TUIVK_F3); // 绑定快捷键(需要时),如某个物理按键可以发出F3键码myButton.setText(L"点我"); // 按钮显示的文本// 设置按钮的宽高,如果不设置宽高,则按钮的宽高由按钮所处的布局控件决定。myButton.setHeight(60);myButton.setWidth(120);//或//myButton.geometry.width = 120;//myButton.geometry.height = 60;
TUIButtonListener
按钮点击事件接口定义如下,
class TUIButtonListener{public: virtual void onClick(TUIButton *view) = 0; // 按钮被点击, view代表哪一个按钮,通过view->getId()获取,按钮实例化之后UI库会自动为该按钮分配一个id。};
模拟器按钮测试界面窗口(ButtonTestWindow)实现TUIButtonListener的onClick()方法,并判断是否为myButton被按下
class ButtonTestWindow : public TUIWindow, public TUIButtonListener{public: ButtonTestWindow(TUIWindow* parent = nullptr); virtual ~ButtonTestWindow(); void onShow(); void onClose(); void onClick(TUIButton* view); // 实现按钮点击方法private: TUIButton myButton;};// 其他方法略...void ButtonTestWindow::onClick(TUIButton* view){ if (nullptr == view) { return; } if (this->myButton.getId() == view->getId()) { this->clickCount++; string s = "myButton按钮被点击"; }}
模拟器显示效果:
