每日一言
所有的努力,都是为了让未来的自己感谢现在的你。
QShortcut
我们的记事本肯定要有通过快捷键对字体的放大和缩小进行控制的功能啊,那么我们这边就这个问题我们需要先学习一下QShortCut
我们这个类就是专门做快捷键的
老样子我们刚开始学习这个类,可以直接通过案例Detailed Description进行查看
来获得使用的灵感,
我们会发现这样写,那么我直接上代码
那么我们会发现,这个快捷键的创建一般在构造函数函数里面实现,这个是为什么呢?
综上所述,把快捷键相关代码写在构造函数里,是为了契合 Qt 中对象初始化流程、保证相关资源和环境就绪、让初始化逻辑集中清晰,以及更好地关联界面加载等,从而保障快捷键功能稳定、正常地工作 。当然,也不是绝对只能写在构造函数,后续在合适的时机(比如界面完全加载后,通过其他触发条件再动态设置快捷键 )也可以调整,但构造函数是最基础、最常用的初始化位置。
好的我们先去实现一下快捷键对记事本的打开,还有我们记事本的保存功能
我这边设置的是ctrl+0就是对文件的打开 ctrl+s就是对文件的保存
那我们会发现就这样可以了吗?实际上是没有用的,因为还需要信号的绑定,那么就是信号与槽的操作
就是信号的问题,会发现文档说,我们按下快捷键的时候会发信号,这个信号叫做activated
好的在这边我们可以直接用lambda表达式来进行信号与槽的绑定
那么我们按下快捷键ctrl+o的时候那么这个就应该出现弹窗,也就是和我们打开文件的操作是一样的,所以这边我们直接使用open的这个函数就可以了,
那么我们按下快捷键ctrl+S的时候那么这个就应该出现弹窗,也就是和我们保存文件的操作是一样的,所以这边我们直接使用save的这个函数就可以了,
那么我们这样就实现了我们想要的效果了
好的那么现在我们实现快捷键放大文字,和缩小文字也就很简单了
那么我们要先处理怎么放大文字和缩小文字
首先我们在textEdit对文字的操作肯定是QTextEdit类里面寻找答案,因为TextEdit是QTExtEdit的对象,那么我们就去寻找
然后我们会发现没有,或许我们会看到很多关于设置font的函数,但是有些是不一样的效果的,所以我们需要自己积累起来,就比如我这边的这个,专门是对于textEdit控件的字体放大,缩小的方法
我们发现这个QTextEdit里面没有找到font()这个方法,我就直接说了我们需要找到这个font()方法,我们没有在QTextEdit里面找到,那么我们就沿着继承的一个一个类继续找,最后在QWidget这个类里面找到了我们想要的方法
代码展示
这个方法的话是返回一个QFont类型的已有字体对象的引用,不会创建新的对象,也就是所有的属性,和方法都复制到我们新创建的QFont font对象进行接收
QFont 对象包含的远不止字体大小,它是一个完整的字体描述对象,涵盖了字体的所有属性。
操作 | 语法 | 核心区别 | 你的代码属于 |
复制 | QFont a = b; | 创建新对象,属性来自 b | ✅ |
赋值 | a = b;(a 已存在) | 修改 a 的属性,覆盖原有值 | ❌ |
然后我们由于知道了QFont类里面有显示字体大小的函数pointSize
返回值类型是int,所以我们用这个自定义的fontsize进行承接(返回是当前字体的大小),还有这个
if(font.pointSize()==-1) return;这个完全是因为需要谨慎一点,毕竟人家说了返回-1的话就是返回错误(设置错误),所以我们需要进行判断一下
,因为我们不是信号与槽吗,所以我们是这样设计的,我们设计的是用这个快捷键的时候字体就会比上次的字体更大1号,
所以,还是值得注意的是,这边我们进行设置的时候是需要先font这个对象设置为新的字体大小后,还需要进行对textEdit的字体大小进行设置
为什么呢?可能很多人搞不懂,为什么很糊涂
因为我们的font是我们字体的所有数据,textEdit也有自己的对字体的控制的一套系统,所以我们还需要进行对textEdit的字体进行重新设置,并且也有对应的函数叫做setFont(font) 这个就是将我们font这个对象的引用传进去,
我们要知道一点,这个font是我们的字体对象,包括了字体的大小,格式、颜色等等各种属性,所以我们这边font.setPointSize这是在对我们的字体的大小做修改,所以最后setfont这个函数也是传我们新创建的这个font对象的引用,也就是所有的属性和方法,包括我们修改好的字体的大小以及等等,就等于是更换一遍属性一样,其实也是为了方便开发,因为以后会改字体的颜色、格式等等、所以直接传对象引用会省去好多代码,因为都改在对象里面了
Setfont(新数据) 等于刷新一下
我不懂你们看不看的懂,我是感觉很形象,很棒
所以啊,因此我们的对字体放大的方法就设置好了
缩小的代码也是如此
接下来我们熟悉对信号与槽的绑定,还有对快捷键的创建
我们为了减少一点构造函数的代码,我们对代码片段进行了封装也就是这个zoomIn和reduce(如下)
这样就可以实现我们想要的效果了
总体逻辑是什么呢,就是我们要知道这个QShoutcut这个类是专门对我们这个键盘上的快捷键进行创建的、让我们知道怎么创建,怎么使用都有讲解,将怎么创建的案例和还有我们按下快捷键的时候,会发送actived这个信号,所以我们需要进行信号与槽的绑定,那么槽函数的话的话就主要是我们的字体的放大和缩小,我们想要的是我们通过ctrl+shift+加号按下的时候,发送actived信号给窗口进行捕获,随后调用槽函数,那么我们这边要注意的一个点是ctrl+shift+加号 我们是想要写成ctrl + shift + + 这样写的,但是我们不能这样写,必须要写=号,和键盘的布局有关系
其实也是约定俗称的写法,真的不需要进行太多的了解,
简单说:因为 + 是 Shift + = 的结果,没有单独的 + 按键,所以快捷键里用 = 来表示这个物理按键,写成 Ctrl + Shift + = 更准确地反映了实际操作,这是行业通用的表示方法~
我们这个槽函数写字体的放大和缩小操作,那么我们有一个函数叫做font(),那么
这个font的话就是可以返回字体的所有信息了。这个font位于QWidget类里面,返回的是对象的引用,那么我们创建一个对象进行承接,所有的数据(属性和方法),随后我们又通过这个font对象进行对字体的设置,设置逻辑为,每次触发信号的时候,我就让字体字号+1,怎么加1呢,我们对font这个对象设置完之后我们还是需要对textEdit的字体进行更新的,也就是重新setFont()传的参数也是font的引用