网站域名以co与com有什么不同,网站做百度百科,韶关做网站的公司,十堰网站开发培训第三代软件开发-实现需求长时间未操作返回登录界面 文章目录 第三代软件开发-实现需求长时间未操作返回登录界面项目介绍实现需求长时间未操作返回登录界面实现思路用户操作监控QML 逻辑处理 关键字#xff1a;
Qt、
Qml、
QTimer、
timeout、
eventFilter 项目介绍 欢迎…
第三代软件开发-实现需求长时间未操作返回登录界面 文章目录 第三代软件开发-实现需求长时间未操作返回登录界面项目介绍实现需求长时间未操作返回登录界面实现思路用户操作监控QML 逻辑处理 关键字
Qt、
Qml、
QTimer、
timeout、
eventFilter 项目介绍 欢迎来到我们的 QML C 项目这个项目结合了 QMLQt Meta-Object Language和 C 的强大功能旨在开发出色的用户界面和高性能的后端逻辑。 在项目中我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件我们能够迅速开发出丰富多样的界面效果和动画效果。同时我们利用 QML 强大的集成能力轻松将 C 的底层逻辑和数据模型集成到前端界面中。 在后端方面我们使用 C 编写高性能的算法、数据处理和计算逻辑。C 是一种强大的编程语言能够提供卓越的性能和可扩展性。我们的团队致力于优化代码减少资源消耗以确保我们的项目在各种平台和设备上都能够高效运行。 无论您是对 QML 和 C 开发感兴趣还是需要我们为您构建复杂的用户界面和后端逻辑我们都随时准备为您提供支持。请随时联系我们让我们一同打造现代化、高性能的 QML C 项目 重要说明☝
☀该专栏在第三代软开发更新完将涨价
实现需求长时间未操作返回登录界面
实现思路
在主窗口类中定义一个计时器对象QTimer *timer和一个时间间隔用于记录用户最后一次操作的时间。
QTimer *timer;
int idleTime;在构造函数中初始化计时器并连接计时器的timeout()信号到一个槽函数。
timer new QTimer(this);
connect(timer, QTimer::timeout, this, MainWindow::checkIdleTime);在主窗口类中实现一个事件过滤器函数eventFilter()用于监测用户的操作事件。在该函数中如果接收到鼠标点击、键盘按键或移动事件则更新计时器记录的时间。
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{if (event-type() QEvent::KeyPress || event-type() QEvent::MouseButtonPress ||event-type() QEvent::MouseMove){idleTime 0; // 重置计时}return QObject::eventFilter(obj, event);
}在主窗口的showEvent()函数中设置事件过滤器以便开始监测用户操作事件。
void MainWindow::showEvent(QShowEvent *event)
{QWidget::showEvent(event);qApp-installEventFilter(this);idleTime 0; // 重置计时timer-start(1000); // 启动计时器每秒触发一次 timeout() 信号
}实现槽函数checkIdleTime()在该函数中检查空闲时间是否超过设定的阈值。如果超过则显示登录界面并停止计时器。
void MainWindow::checkIdleTime()
{idleTime;if (idleTime MAX_IDLE_TIME){qApp-removeEventFilter(this); // 停止事件过滤器timer-stop(); // 停止计时器// 显示登录界面的代码showLoginDialog();}
}通过以上步骤我们可以实现长时间未操作后返回登录界面的功能。在用户进行任何操作时会重置计时器的时间若用户在一段时间内没有操作计时器会超过预设的阈值触发返回登录界面的操作。需要根据实际情况自行调整MAX_IDLE_TIME的值以秒为单位。同时需要在主窗口类中添加与登录界面相关的自定义函数showLoginDialog()来显示登录界面。
如果你碰巧看来我上一篇文章【第三代软件开发-TabView】而且你还看我的另外一篇已经发表的文章https://blog.csdn.net/z609932088/article/details/130926692?spm1001.2014.3001.5501
那么就已经知道怎么做了吧。
用户操作监控
用户能操作什么呢键鼠和触屏应该没有其他的吧所以咱们这里只需要处理这些这部分在我上一篇已经发布的博文中已经说了咱们直接就附代码凑字数了。
bool XXXX::eventFilter(QObject *obj, QEvent *event)
{/*** 捕获键盘事件**/if( event-type() QEvent::KeyPress || // 键盘按下event-type() QEvent::MouseMove || // 鼠标移动event-type() QEvent::MouseButtonPress || // 鼠标按键按下event-type() QEvent::Wheel || // 鼠标滚轮事件event-type() QEvent::TouchBegin) // 屏幕触屏事件{m_lockScreenTimer-start(m_timerLong);setLockScreen(false);}
#ifdef QT_NO_DEBUG/*** 禁止正常关闭程序**/if(event-type() QEvent::Close !m_closeSystem)event-ignore();
#endifreturn QObject::eventFilter(obj,event);
}注意哦这里是C的代码我们需要把这个注册成QML可以识别的模块这里还有就是要注意我这个事建过滤器是安装给了QApplication。代码如下
QApplication::instance()-installEventFilter(this);QML 逻辑处理 XXXX{id: keymonitortimerLong: UserProfile.screenProtectTime // 屏保时间onLockScreenChanged:{if(tabview_mainFrame.currentIndex 0){if(lockScreen){tabview_mainFrame.getTab(0).item.lockScreen()}elsetabview_mainFrame.getTab(0).item.unLockScreen()return}if(tabview_mainFrame.getTab(1).item){if(lockScreen !(tabview_mainFrame.getTab(1).item.frameIndex 1 || tabview_mainFrame.getTab(1).item.frameIndex 0)){tabview_mainFrame.currentIndex 0;tabview_mainFrame.getTab(0).item.lockScreen()tabview_mainFrame.getTab(1).item.signalLockScreen()}elsetabview_mainFrame.getTab(0).item.unLockScreen()}else{if(lockScreen){tabview_mainFrame.currentIndex 0;tabview_mainFrame.getTab(0).item.lockScreen()}elsetabview_mainFrame.getTab(0).item.unLockScreen()}}}这里不需要咱们做过多解读因为有部分代码是为了业务即在某一模式下不能锁屏就和咱们看电影全屏不能进屏保一个道理。