2023.6.1 星期四 长沙 天气晴。在学校毕业的事情弄得差不多了,回到实习公司继续工作并期待转正,这周有一个任务就是在软件设计过程中,设计某些具有特殊功能的交互界面,该界面仅供软件设计内部人员等特殊人群使用,因此通过特殊交互界面可隐藏来达到目的。在存储上位机软件开发过程中,新增的测试界面仅供公司研发部门人员使用,因此界面隐藏是非常有必要的。我就整合了一下我查找到的资料,在这方面技术总结一下,如果技术上大牛认为有问题,欢迎纠正,主要参考学习了下方博主的文章,非常感谢技术分享。
https://blog.csdn.net/qq_27450255/article/details/78780959?ops_request_misc=&request_id=&biz_id=102&utm_term=qt%E8%AE%BE%E7%BD%AE%E9%95%BF%E6%8C%89%E5%BF%AB%E6%8D%B7%E9%94%AE&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-2-78780959.142^v88^control_2,239^v2^insert_chatgpt&spm=1018.2226.3001.4187
1.长按组合键技术理论
在Qt软件设计过程中实现该技术,主要有两个技术关键点分别是长按判断以及特定组合键获取和识别判断。
针对键盘长按情况,可以通过键盘事件的“isAutoRepeat”属性判断,该属性来检测键盘事件是否自动重复。当长按时(即OS检测到键盘事件为自动重复),会出现键盘事件的键盘按压事件(keyPressEvent)与键盘释放事件(keyReleaseEvent)不断交替轮流交替发生。为了方便表示有如下定义
·P:press事件
·R:release事件
·T:isAutoRepeat()返回true
·F:isAutoRepeat()返回false
当长按一个键时,运行结果表示为:P(F)R(T)P(T)R(T)..R(T)P(T)R(F)
从上面的运行结果可以知道当长按时,第一按压和最后一次释放“isAutoRepeat”属性为false,其他的皆为true。针对按压键盘组合键情况,可以使用Qt提供的QKeySequence类表示指定的特殊组合键,并且可以通过QKeyEvent::matches()函数判断获取的键盘事件的按键是否和该组合键匹配。
2.长按组合键技术实现
用一个QKeySequence类对象保存组合键,以便使用matches()比对获取的键盘对象是否符合设计者所保存的组合键。在定义一个布尔类型的FlongPress变量,该变量的存在的目的是当长按压时,键盘事件按松会不断交替执行,为确保符合长按压组合键时相关执行动作只执行一次,避免不断重复执行。当长按压组合键结束时(即isAutoRepeat属性转变为false后),FlongPress状态要恢复最初状态。
3.长按组合键技术代码实现
//在Qt软件设计过程中,可以通过重写QWidget的KeyPressEvent()函数实现
void Widget::keyPressEvent(QKeyEvent *event)
{
//保存自定义组合键
QKeySequence seq(Qt::ControlModifier + Qt::ShiftModifier + Qt::Key_F12);
if(event->isAutoRepeat() && FlongPress )
{
if(seq.matches(event->modifiers()+event->key()))
{
//符合长按状态并且事件的组合键匹配自定义组合键,执行下面两个动作
f.show();//隐藏式界面弹出
FlongPress=false;//确保长按一次,动作只执行一次,防止重复执行 }
}
else if(!event->isAutoRepeat())
{
FlongPress=true;//恢复最初状态
}
}
最后测试没问题,符合预期效果,如有不懂,可以问我啦
这天是工作的前一天,也就是星期一,等着与弟弟与我会合,准备用自己赚的钱带正在处于大一的弟弟去吃喝玩,吃的烤肉喝的茶颜玩的桌球开心的弟弟成长的我。