成都网站优化外包,物联网平台软件开发,重庆建设工程信息网官网加密锁安装驱动,哈尔滨模板网站建设文章目录摘要QWidgetQML方法 1方法 2关键字#xff1a;
Qt、
eventFilter、
Close、
键盘、
任务管理器摘要
今天要聊得内容还是怎么防止别人关闭我的程序#xff0c;之前都是在win下面#xff0c;一般都是用过钩子连捕获键盘事件#xff0c;完了吧对应的事件忽略#x… 文章目录摘要QWidgetQML方法 1方法 2关键字
Qt、
eventFilter、
Close、
键盘、
任务管理器摘要
今天要聊得内容还是怎么防止别人关闭我的程序之前都是在win下面一般都是用过钩子连捕获键盘事件完了吧对应的事件忽略但是这个不能夸平台所以我就在想有没有一个稍微通用点的方法。
今天我尝试的方法是从Qt 下手来想法解决这个问题。但是从Qt出发的话解决的只能是程序本身而系统还是无法屏蔽的。只能是防止别人意外按到 alt F4结束程序而无法做到不让别人结束程序。当然它有可能自己就结束了哈哈哈。
QWidget
传动的QWidget这里我能想到的就是重载关闭函数但是这个太低级了所以我还是用了一个更好玩的方法那就是Qt 的事件过滤器eventFilter。
首先我们需要注册全局事件过滤器代码如下
QApplication::instance()-installEventFilter(this);完了就是重载eventFilter函数了。
声明 bool eventFilter(QObject *obj, QEvent *event) override;实现
bool Turing_KeyMouseMonitor::eventFilter(QObject *obj, QEvent *event)
{/*** 捕获键盘事件**/if(event-type() QEvent::KeyPress || event-type() QEvent::MouseMove || event-type() QEvent::MouseButtonPress){m_lockScreenTimer-start(m_timerLong);setLockScreen(false);}
#ifdef QT_NO_DEBUG/*** 禁止正常关闭程序**/if(event-type() QEvent::Close)event-ignore();
#endifreturn QObject::eventFilter(obj,event);
}这里重点就是下面的部分 if(event-type() QEvent::Close)event-ignore();将关闭时间忽略。
这里我贴心的为了方便调试在Debu模式下是不忽略关闭事件的只有在我们发布时使用release模式编译才会。
QML
轮到QML记得自己在17年哪会玩QML 的时候哪会资料是真的少现在在来玩QML能找的的资料已经很多了最近在Bilibili大学上面都有好多quick的教程了看来QML 这几年的发展也是不错的。
方法 1
其实QML下的基本原理和QWIdget基本一致既然从Qt 下手那就基本还是只能解决程序问题无法解决系统问题。所以在QML下面基本思想还是重写关闭事件
代码如下 /*防止客户主动关闭程序*/onClosing:{close.accepted false}其实正常在用户触发关闭事件的时候应该礼貌的提示客户他触发了关闭事件是他无意的还是就是想关闭程序但是这个也要分场合比我我们的程序最总是泡在机器设备上的我们是不希望客户看到我们除了程序以外的其他的东西的看考那些数控车床基本上是不是开机就是程序程序关闭也就是关机了没有可以退出程序的吧所以这里我是没有弹窗提示的当然不是不能做只是我这里不需要。
方法 2
这是充QML界面层来解决这个问题还是可以从CPP方面下手的这里就可以用我上面的代码来实现了包括我在项目中实际也是使用上面的方式来实现的。这里就不用我在复制下俩吧。