一种改善Qt开发环境的关键词提示方法技术领域:
本发明涉及软件开发领域,特别是基于Qt文本编辑的开发,具体地是一种改善QT开发
环境的关键词提示方法。
背景技术:
Qt是跨平台的应用程序和UI框架,包括跨平台类库、集成开发工具和跨平台IDE,只需
一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些
应用程序。
在软件开发过程中,用户往往在输入某个单词时,仅仅记住了单词的前半部分,只
能停下来再去找单词;又或者在输入某些方法名时,单词的字符长度很长,如果在每次用到
的地方一次又一次的输入,不仅浪费了不必要的精力,也导致了工作效率大大降低。此时会
希望,如果在输入的时候,只需要输入单词的前几个字母,或者输入几个单词的首字母,就
可以自动地进行相应的候选列表提示,用户要做的仅仅是从候选队列中选择需要的,然后
会自动补全在输入的位置,这样就不必要去记住很多的变量名、方法名等等。
发明内容:
本发明所要解决的技术问题是针对现有技术在Qt开发环境中输入单词或方法名时存
在浪费精力、工作效率低等缺点,提供一种改善Qt开发环境的关键词提示方法。
本发明解决其技术问题所采取的技术方案是:一种改善Qt开发环境的关键词提示
方法,其特征在于:包括以下步骤,
步骤1:检测有键盘按压事件;
步骤2:进入键盘按压事件处理函数;
步骤3:判断当前的文件是否只读且内容有变化,且按键内含有可打印的ASCII字符;
如果是,进行步骤4;如果否,结束;
步骤4:判断字符是否为字母、数字或下划线;
如果是,进行步骤5;如果否,结束;
步骤5:判断自动补全是否在进行;
如果否,进行步骤6;如果是,结束;
步骤6:启用请求自动补全定时器;
步骤7:进入请求自动补全步骤;
步骤8:进入自动补全步骤;
步骤9:显示自动补全列表;
步骤10:选中自动补全列表的数据并补全在用户输入的位置,完成自动补全。
进一步地,在步骤3中,当键盘输入时,检测到当前的文件内容已经发生了变化,进
入语法高亮步骤,其包括以下步骤:自动将当前文件内容按行进行提取,每行包装成一个
block,顺序保存;接着对block列表遍历,对每个block进行符号提取,提取出的符号放入符
号表tokens;然后再对产生的tokens列表进行遍历,将遍历的每个符号按照预设定的样式
设置符号的文本格式。
进一步地,步骤7的请求自动补全步骤包括以下步骤:
S1:请求自动补全定时器超时信号;
S2:进入自动补全定时器超时处理函数;
S3:停止请求自动补全定时器;
S4:判断自动补全是否真正进行;
如果否,进入步骤S5;如果是,结束;
S5:判断是否依然位于触发的文本;
如果是,进入步骤S6;如果否,结束;
S6:发出自动补全的请求;
优选地,自动补全定时器时钟周期为500ms。
进一步地,步骤8的自动补全步骤以下步骤:
S11:接收到自动补全请求;
S12:判断当前编辑器是否支持自动补全;
如果是,进入步骤S13;如果否,结束;
S13:判断是否满足自动补全条件;
如果是,进入步骤S14;如果否,结束;
S14:收集自动补全片段;
优选地,步骤S14中在收集自动补全片段时,在三个位置去寻找:首先,寻找编码语言关
键字列表;其次,在用户自定义的宏、变量名以及声明中寻找;最后,在软件默认及用户自定
义的补全片段中寻找。
更优选地,编码语言关键字列表为int、double或float。
本发明由于采取了上述技术方案,其具有如下有益效果:
本发明所述的一种改善Qt开发环境的关键词提示方法,能够动态地在内存中建立关键
词表,在用户每次输入结束后进行更新,辅助用户输入过程,减轻对众多单词的记忆,提高
输入效率;并且能够对关键词表进行定点高亮着色,同时实现实时在输入的光标位置进行
提示。
附图说明:
图1为本发明所述的一种改善Qt开发环境的关键词提示方法的流程示意图;
图2为本发明所述的代码编辑器的结构示意图;
图3为本发明所述的语法高亮步骤的流程示意图;
图4为本发明所述的请求自动补全步骤的流程示意图;
图5为本发明所述的自动补全的流程示意图。
具体实施方式:
以下结合附图对本发明的内容作进一步说明。
如图1、图2、图4和图5所示,本发明所述的一种改善Qt开发环境的关键词提示方
法,用于辅助用户在Qt开发环境中输入关键词,其特征在于,包括以下步骤:
步骤1:检测有键盘按压事件;
当有键盘按下时,会自动触发所述改善Qt开发环境的关键词提示方法;
步骤2:进入键盘按压事件处理函数;
步骤3:判断当前的文件是否只读且内容有变化,且按键内含有可打印的ASCII字符;
如果是,即如果文件不是只读模式,是可编辑的,同时内容有变化且按键内含有可打印
的ASCII字符,则进行步骤4;
如果否,即如果文件是只读模式,是不可编辑的,或者可编辑但无内容变化,或者可编
辑并有内容变化但不含有可打印的ASCII字符,则结束;
在图2中,本发明中的高级代码编辑器包括文本编辑器和语法分析器,所述文本编辑器
包括文本输入模块、片段收集器、文本高亮器和编辑器设置模块,所述语法分析器包括代码
补全器、语法高亮器、词法分析器和类图生成器;其中,代码补全器能够对用户输入的信息
进行匹配并进行自动的提示,即如果当前文档里存在某个单词,如MyApplication,当用户
再次输入该单词的部分之后,如Mya,则会自动在对应的光标处显示Mya开头的可能用到的
单词列表,从而供用户选择;语法高亮器能够对编程中涉及到的关键词、自定义变量等加以
颜色,便于区分,该功能会先调用词法分析器对用户输入的内容按类别进行提取;词法分析
器对每行文本内容进行分析和符号提取;类图生成器用于提取用户定义的类和类之间的关
系,形成一棵继承树,例如MyItem类继承的关系可以通过左侧继承树进行查看,有利于帮助
用户进行快速分析。本发明所述的改善Qt开发环境的关键词提示方法借助词法分析器动态
对输入的内容扫描形成原始单词表,利用语法分析器对原始单词表分析,提炼出类型名、变
量名、方法名形成不同的关键词表,并调用绘图引擎,对关键词表进行定点高亮着色;同时
检查键盘输入时间间隔,超过设定阈值,触发字符串的提取模块,对用户输入的内容进行最
小提取,调用KMP匹配算法,对提取出的字符串与关键词表进行匹配,返回匹配成功列表,实
时在输入的光标位置进行提示;其通过动态地在内存中建立关键词表,在用户每次输入结
束后进行更新,辅助用户输入过程,减轻对众多单词的记忆,提高输入效率。
如图3所示,在步骤3中,当键盘输入时,检测到当前的文件内容已经发生了变化,
进入语法高亮步骤,其包括以下步骤:自动将当前文件内容按行进行提取,每行包装成一个
block(区块),每个block保存每行文本内容,顺序保存;接着对block列表遍历,对每个
block用词法分析器进行符号提取,例如int a= 3,词法分析器分析此行文本后,会提炼出
关键字“int”,变量名“a”,运算符“=”,常数“3”,界符“;”,提取出的符号放入符号表tokens;
然后再对产生的tokens列表进行遍历,将遍历的每个符号按照预设定的样式设置符号的文
本格式。
步骤4:判断字符是否为字母、数字或下划线;
如果是,进行步骤5;如果否,结束;
步骤3和步骤4主要用于忽略非字母、非数字以及非下划线字符的输入,避免因不符合
字符键入导致方法过于频繁的调用。
步骤5:判断自动补全是否在进行;
如果否,进行步骤6;如果是,结束;
在检测输入满足条件后,判断请求自动补全定时器是否已经工作,如果已在工作,则结
束,即此流程自动终止,从而避免因为输入过快,导致方法频繁被调用,反而使得效率降低。
步骤6:启用请求自动补全定时器;
若自动补全定时器未在工作,则启动请求自动补全定时器,当自动补全定时器时钟周
期(500ms)到来后,再次对输入地方进行条件判断,如果鼠标或者文件状态改变,那么此次
的补全工作意义已经消失。
步骤7:进入请求自动补全步骤;
如图4所示,在启用请求自动补全定时器后,进入请求自动补全步骤,其包括以下步骤:
S1:请求自动补全定时器超时信号;
S2:进入自动补全定时器超时处理函数;
S3:停止请求自动补全定时器;
S4:判断自动补全是否真正进行;
如果否,进入步骤S5;如果是,结束;
S5:判断是否依然位于触发的文本;
如果是,进入步骤S6;如果否,结束;
S6:发出自动补全的请求。
步骤8:进入自动补全步骤;
如图5所示,在接收到自动补全请求后,进入自动补全步骤,其包括:
S11:接收到自动补全请求;
S12:判断当前编辑器是否支持自动补全;
如果是,进入步骤S13;如果否,结束;
S13:判断是否满足自动补全条件;
如果是,进入步骤S14;如果否,结束;
S14:收集自动补全片段;
在收集自动补全片段时,主要在三个位置去寻找:首先,寻找编码语言关键字列表,例
如int、double或float等;其次,在用户自定义的宏、变量名以及声明中寻找;最后,在软件
默认及用户自定义的补全片段中寻找。
步骤9:显示自动补全列表;
将提取出的输入字符与步骤S14中三个位置所产生的字符匹配之后,将匹配成功的结
果汇总,并在用户输入的位置显示自动补全列表。
步骤10:完成自动补全;
在步骤9补全列表显示之后,用户可以通过方向键进行上下切换,选中某个列表数据后
并按回车,自动将选中的数据补全在用户输入的位置。
本发明所述的一种改善Qt开发环境的关键词提示方法通过上述一个流程之后,动
态地在内存中建立关键词表,在用户每次输入结束后进行更新,辅助用户输入过程,减轻对
众多单词的记忆,提高输入效率。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发
明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技
术领域,均同理包括在本发明的专利保护范围内。