Qt:简单的记事本小软件

这学期的C++大作业是结合Qt做一个医院的病人排 系统,所以最近在学习Qt。最好的学习方法就是实践,多动手做一些东西才能了解和熟悉Qt的那些库函数,周五晚上做了个记事本小软件,实现了大部分微软记事本的功能。写下留存记录。

来几张效果图吧:

小软件的主要功能包括:

  • 新建文件,打开文件,保存文件,文件另存为
  • 撤销,重做
  • 复制,剪切,粘贴
  • 改变字体,改变字体颜色

第一部分:

一个一个慢慢说。首先是软件的基本界面,有了界面再添加功能。构成界面的主体就是菜单栏,工具栏和文本区域。

菜单栏:

上面代码声明三个菜单项,然后再添加到菜单栏,Qt里一个menuBar()函数返回主窗口的菜单栏。也可以像下面这样用QMenuBar声明一个菜单栏:

因为我是直接在MainWindow窗口直接写的代码,就用menuBar()函数了。将菜单项添加到菜单栏:

在每个菜单项下面有好几个功能,比如File菜单下有新建,打开,保存,另存为,打印,退出功能,在Qt里每一个功能作为一个动作,即QAction,这与java不同,java里每一个菜单项的子项是menuItem。声明子菜单项(以File菜单为例):

在Edit,Help菜单下的那些子项也像上面那样声明就行了,这里就不贴代码里。接下来就是实例化每一个动作,以newAct为例:

上面三行代码中,第一句实例化一个动作,第一个参数设置它的Icon,即图标,第二个参数是名字,第三个参数是父对象,this指当前窗口。函数原型如下:

第二句代码设置快捷键。第三行代码设置状态栏信息,状态栏在软件的下面,当鼠标停在该动作上时在状态栏左边显示的信息。
接下来就是把这些action添加到菜单项下面。addAction()函数负责完成这个功能,如下:

addSeparator()函数是在两个动作之间加一条分割线。

依葫芦画瓢其他的一些菜单子项也是这么个步骤,不再详述。接下来是工具栏。

工具栏

当新建工程时主窗口是自带工具栏的,那便是mainToolBar,所以不必另外再定义新的工具栏,直接在它上面添加动作就行了。添加动作和添加分割线的函数与菜单栏一样,示例代码如下:

文本区域

statusBar()函数获取主窗口的状态栏,addPermanentWidget()函数添加永久性部件,永久性意味着它不会被临时信息所覆盖,添加到状态栏右边。刚才在菜单栏设置每个动作的信息时,显示的信息是在状态栏左边。然后就是写一个函数获得鼠标光标的位置信息,并把信息显示在Label上。

最后,也是最重要的一步,谁来调用这个函数们怎么知道鼠标光标的位置改变了呢就要说到Qt最厉害的地方了,信 与槽。简单来说:槽就是响应函数,信 就是给响应函数发的消息,意思是这个消息一产生,相应的函数就要执行。就像电影《集结 》里,集结的 声一响你就可以撤退了,这里 声就是信 ,撤退就是槽。一行代码如下:

函数原型:

参数说明:

  • const QObject * sender :发出信 的对象
  • const char * signal : 信
  • const QObject * receiver : 接收信 的对象
  • const char * method : 槽
  • Qt::ConnectionType type = Qt::AutoConnection : 连接方式,已经设定为自动连接了,多数情况下不用考虑这个参数

在我们那行代码里,发出信 的对象是文本区域,即textEdit,信 是鼠标光标的位置变了,cursorPositionChanged()函数返回这个信息,这个函数式Qt提供的,接收信 的对象是当前主窗口,槽就是showTextInfo()函数,实时改变状态栏右下角的信息。

第二部分

各个功能的实现。菜单栏一共就三个选项File,Edit,Help,一个一个说。

Edit

Edit菜单项下面有五个子项(动作),分别是:

  • Undo :撤销
  • Redo :重做
  • Cut :剪切
  • Copy :复制
  • Paste :粘贴

这些功能Qt里都提供了函数实现,所以这部分功能就是连接信 与槽就行了,并且那些快捷键操作Qt也实现了。代码如下:

刚开始我并不知道Qt提供了这些函数,就自己写了复制和粘贴的函数,当写剪切的函数时,看文档发现Qt已经实现了这些个函数,就拿来用吧。有现成的轮子何必再自己造轮子呢!把自己写的那两个函数的代码也贴上来吧:

Help

Help菜单项就一个子菜单–about,弹出一个消息窗口,上面显示一些我想说的信息。它的动作名是aboutAct。槽是actAboutAuthor()函数。

File

File菜单下有六个子项

  • New :新建
  • Open :打开
  • Save :保存
  • Save As :另存为
  • Print :打印,这个功能是调用打印机的,没实现
  • Quit :退出程序

当要新建,打开其他文件或退出程序时,需要判断当前的文件内容是不是被修改了,如果被修改了,就要提醒用户是不是要保存当前文件,所以需要一个函数来返回这个信息。函数如下:

当保存文件时,还要判断这个文件是不是存在,如果存在直接保存就好,如果不存在,就要新建一个文件再保存,相当于另存为了。currentFile是全局QString变量,指当前的文件名,如果为空说明需要另外建一个文件保存当前文本信息,就调用另存为的响应函数;非空就直接在当前文件下保存内容。

另存为的槽函数如下,getSaveFileName()函数弹出文件保存对话框并返回文件名。第三个参数是默认路径和默认文件名,第四个参数是文件过滤器。如果是一个过滤器多个文件的话,文件后缀以空格分开,如:

如果是多个过滤器的话,过滤器之间用两个分 隔开,如

槽函数代码如下:

saveFile()函数代码如下:

新建文件的槽函数如下:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年1月4日
下一篇 2016年1月5日

相关推荐