无需加入任何头文件,使用pm.
或者pm->
即可进行联想
pm 的全部相关函数位于库/base/Interface.h 中
/**
* @brief 打开页面
* @param id 页面名称id, 默认空时打开首页
* @param mode 模式,默认0-打开新页面
* @param target 父页面, 默认nullptr
* @return 失败时返回空指针
*/
virtual IPagePtr open(const string& id = "", int mode = PageMode::NEWWIN, STTWidget* target=nullptr) throw() = 0;
/**
* @brief 关闭指定页
* @param id
* @return
*/
virtual bool close(const string& id)=0;
/**
* @brief 构建页面
* @param id
* @param mode
* @param target
* @return
*/
virtual IPagePtr build(const string& id = "", int mode = PageMode::NEWWIN, STTWidget* target=nullptr)=0;
/**
* @brief 获取当前页(最上层页)
* @return nullptr或页面指针
*/
virtual STTPage* getCurrentPage()=0;
/**
* @brief 从已打开页面中获取指定页
* @return nullptr或页面指针
*/
virtual STTPage* getPage(const string& id)=0;
/**
* @brief 获取消息提示框
* @param msg 消息提示内容
* @param type 消息框类型
* @return
*/
virtual IDialogPtr getMessageBox(const string& msg="", int type=MSGBOX_TYPE::TIP) = 0;
/**
* @brief 获取消息确认框
* @param msg 消息内容
* @return
*/
virtual IDialogPtr getConfirmBox(const string& msg="") = 0;
/**
* @brief 获取输入框
* @param msg 消息内容
* @param content 文本框内容
* @return
*/
virtual IDialogPtr getInputBox(const string& msg = "" , const string& content = "") = 0;
/**
* @brief 获取进度框
* @param msg 消息内容
* @param mode 进度框模式(0:倒计时,1:变量值变化)
* @param parameters 设置参数 (例如:倒计时模式时:"5"[100的因数] 变量值变化模式时:"变量名")
* @return
*/
virtual IDialogPtr getProgressBox(const string& msg = "", int mode=PROGRESS_TYPE::COUNT_DOWN, const string& parameters="") = 0;
/**
* 获取文件选择对话框
* @param title 标题
* @return
*/
virtual IDialogPtr getFileBox(const string& title = "") = 0;
/**
* @brief 获取用户登录
* @param title 标题
* @return
*/
virtual IDialogPtr getLoginBox(const string& title = "登录") = 0;
/**
* @brief 获取用户注销提示框
* @param title 标题
* @return
*/
virtual IDialogPtr getLogoutBox(const string& title="注销", const string& tip="") = 0;
/**
* @brief 指定屏保页
*
* @param id 页面名
* @param type 屏保类型 0:系统默认 1:用户定制(注:此页面需要在build中能返回)
* @param timeout >=10(s), <10时关闭屏保
*/
virtual void setScreenSaver(const string& id = "", int type = 0, int timeout=0) = 0;
/**
* @brief 设置熄屏参数
*
* @param t 延时时间(s),0-关闭熄屏功能
* @param light 熄屏亮度值(1-100)
*/
virtual void setBackLightHoldingTime(int t = 0, int light = 0) = 0;
/**
* @brief 通知外部输入(如:触屏点击、键盘等)
*
* @param reset 复位
*/
virtual void notifyEvdevInput(bool reset=false) = 0;
/**
* @brief 获取锁屏熄屏状态
* @return 0:非锁屏或熄屏 1:锁屏或熄屏状态
*/
virtual int getScreenSaverStatus() = 0;
/**
* @brief 获取屏保类型
* @return 屏保类型 0:普通 1:需认证
*/
virtual int getScreenSaverType() = 0;
使用函数
/**
* @brief 打开页面
* @param id 页面名称id, 默认空时打开首页
* @param mode 模式,默认0-打开新页面
* @param target 父页面, 默认nullptr
* @return 失败时返回空指针
*/
virtual IPagePtr open(const string& id = "", int mode = PageMode::NEWWIN, STTWidget* target=nullptr) throw() = 0;
/**
* @brief 关闭指定页
* @param id
* @return
*/
virtual bool close(const string& id)=0;
// 示例
// 1.关闭当前页,打开新页面 以下两种方法等价
pm->open("Frm01");
pm->open("Frm01",PageMode::NEWWIN);
// 2.在当前页面的基础上打开新页面,当前页面不关闭
pm->open("Frm01",PageMode::MODAL);
// 3.打开嵌入页
pm->open("Frm01",PageMode::EMBEDDED);
// 示例
// 1.关闭当前页 仅当当前页面未被关闭时才有效
pm->close("Frm01");
以上函数中 Frm01
为第一页的页面 id。页面 id 如下图所示
#include "base/Interface.h"
getRuntime()->getIPageMgr()
代替页面的 pm 指针;getRuntime()->getIPageMgr()->open("Frm01");
/**
* @brief 获取消息提示框
* @param msg 消息提示内容
* @param type 消息框类型
* @return
*/
virtual IDialogPtr getMessageBox(const string& msg="", int type=MSGBOX_TYPE::TIP) = 0;
/**
* @brief 获取消息确认框
* @param msg 消息内容
* @return
*/
virtual IDialogPtr getConfirmBox(const string& msg="") = 0;
/**
* @brief 获取输入框
* @param msg 消息内容
* @param content 文本框内容
* @return
*/
virtual IDialogPtr getInputBox(const string& msg = "" , const string& content = "") = 0;
/**
* @brief 获取进度框
* @param msg 消息内容
* @param mode 进度框模式(0:倒计时,1:变量值变化)
* @param parameters 设置参数 (例如:倒计时模式时:"5"[100的因数] 变量值变化模式时:"变量名")
* @return
*/
virtual IDialogPtr getProgressBox(const string& msg = "", int mode=PROGRESS_TYPE::COUNT_DOWN, const string& parameters="") = 0;
/**
* 获取文件选择对话框
* @param title 标题
* @return
*/
virtual IDialogPtr getFileBox(const string& title = "") = 0;
/**
* @brief 获取用户登录
* @param title 标题
* @return
*/
virtual IDialogPtr getLoginBox(const string& title = "登录") = 0;
/**
* @brief 获取用户注销提示框
* @param title 标题
* @return
*/
virtual IDialogPtr getLogoutBox(const string& title="注销", const string& tip="") = 0;
/**
* @brief 指定控件的事件处理函数
* @param code 见stt::constant::MSGBOX_BTN, 如CLOSE、OK
* @param object 控件obj this
* @param handler 处理函数function (uint16_t code, LvEvent e)
*/
virtual IDialog* onEventHandler(uint16_t code, SttObject* object, EHandler handler);
/**
* @brief 绑定“确定”按钮点击事件的回调函数。支持链式调用。
* @param f 回调函数,类型为 std::function<void()>。
* 该函数将在“确定”按钮被点击时执行。
*/
virtual IDialog* onOK(function<void()> f);
/**
* @brief 绑定“取消”按钮点击事件的回调函数。支持链式调用。
* @param f 回调函数,类型为 std::function<void()>。
* 该函数将在“取消”按钮被点击时执行。
*/
virtual IDialog* onCancel(function<void()> f);
/**
* @brief 绑定对话框“打开”事件的回调函数。支持链式调用。
* @param f 回调函数,类型为 std::function<void()>。
* 该函数将在对话框打开时执行。
*/
virtual IDialog* onOpen(function<void()> f);
/**
* @brief 绑定对话框“关闭”或“销毁”事件的回调函数。支持链式调用。
* @param f 回调函数,类型为 std::function<void()>。
* 该函数将在对话框关闭或销毁时执行。
*/
virtual IDialog* onDispose(function<void()> f);
/**
* @brief 显示对话框并初始化其内容。
*/
virtual void show();
// 弹出信息对话框
pm->getMessageBox("弹出信息提示!")->show();
// 点击确定按钮时触发回调函数
pm->getMessageBox("弹出信息提示!")->onOK([]{
cout<<"点击按钮时触发"<<endl;
})->show();
// 通过绑定Lambda表达式的方式为确认对话框绑定回调函数
pm->getConfirmBox("请确认当前操作?")->onOK([]{
cout<<"确认时的函数逻辑"<<endl;
})->onCancel([]{
cout<<"取消时的函数逻辑"<<endl;
})->show();
// 通过定义回调函数再绑定到输入对话框的按钮事件的方式
void Frm02::ok(uint16_t code, LvEvent e) {
string p=(char *)e.user_data;
if(p=="123456"){
cout<<"密码输入正确"<<endl;
}else {
cout<<"密码输入错误"<<endl;
}
}
void Frm02::cancel(uint16_t code, LvEvent e) {
cout<<"密码输入取消"<<endl;
}
IDialogPtr i = pm->getInputBox("请输入密码:");
i->onEventHandler(MSGBOX_BTN::OK,this,(EHandler)&Frm02::ok);
i->onEventHandler(MSGBOX_BTN::CLOSE,this,(EHandler)&Frm02::cancel);
i->show();
// 关闭对话框时触发回调函数
pm->getProgressBox("拍照中,请稍后...",0,"5")
->onDispose([this](){
cout<<"关闭时触发"<<endl;
})->show();
// 通过绑定回调函数的方式获取选中文件的路径
void Frm02::getpath(uint16_t code, LvEvent e) {
string p=(char *)e.user_data;
cout<<"文件路径:"<<p<<endl;
}
IDialogPtr i = pm->getFileBox("文件选择页");
i->onEventHandler(MSGBOX_BTN::OK,this,(EHandler)&Frm02::getpath);
i->show();
// 弹出用户登录对话框
pm->getLoginBox("登录")->show();
// 弹出用户注销对话框
pm->getLoginBox("注销")->show();