Qt仿写Windows记事本程序

  在简单学习了Qt的基本框架后,我尝试编写一个简单的记事本程序,来熟悉Qt常用控件、Qt应用程序的开发流程和Qt信号和槽机制的使用方法。本文将从Qt开发环境搭建、记事本功能设计、记事本程序界面设计、记事本程序功能实现四个方面介绍我是如何实现这个记事本程序的。

Qt开发环境搭建

  Qt开发环境搭建的方法可以参考我的另一篇博客:Windows上Qt开发环境搭建

记事本功能设计

功能需求

  记事本的功能参照Windows系统自带的记事本程序,主要功能有:
  1.文件菜单:新建、打开、保存、另存为、退出;
  2.编辑菜单:查找、替换、转到;
  3.查看菜单:缩放、状态栏。

功能分析

  记事本应用程序仅支持仅仅开启一个主窗口(不支持Tab页),该窗口需要记录当前文件名(完整路径)。同时,因为需要标识文件的编辑和保存状态,程序需要维护一个状态标记(当前文件的修改是否保存)。根据文件的状态标记,程序可以进行相应操作(如保存文件、给窗口名添加*表示未保存等)。另外,程序为了支持光标位置、缩放等状态栏信息的显示,需要额外记录相关信息。
  将菜单中主要功能的逻辑分析如下:

新建文件

  新建文件一定会改变程序当前维护的信息,因此执行新建任务时需要对当前文件状态进行检查,处理未保存的文件修改。新建文件时,初始化当前文件名为空(因为还没有一个完整路径的文件与之对应),标记为未保存,同时更新窗口名为新建文件.txt*

打开文件

  打开文件如果成功那么也会改变当前程序维护的信息,因此执行打开任务时也需要对当前文件状态进行检查,处理未保存的文件修改。打开文件时,如果用户未选取文件,则不做任何操作;如果用户选取了文件,打开成功则初始化当前文件名为打开的文件名,标记为已经保存,同时更新窗口名为文件名;打开失败则弹窗提醒,不做其他任何操作。

保存文件

  保存文件的操作,不论当前是否有文件打开都应该响应。如果当前没有文件打开,则调用另存为;如果当前文件名不为空则执行保存操作,如果文件标记已保存则不做任何操作,如果文件标记是未保存,则保存文件并更新窗口名(去掉*标记)。

另存为

  另存未的操作需要用户选中存储的路径和文件名。如果用户未提供具体的路径和文件名,则不做任何操作;如果用户提供了另存文件的路径和文件名,则执行保存操作,更新文件标记为已保存,窗口更名为另存的文件名。

退出

  退出操作仅需要检查当前文件状态,如果文件标记是未保存,则弹窗提醒是否保存,如果用户选择保存则执行保存操作,如果用户选择不保存则不做任何操作。

编辑与查看

  编辑与查看功能更多是和Qt的组件进行交互,逻辑功能相对比较简单,这里不再列出。

记事本程序界面设计

  记事本程序需要三个主要界面:主界面、查找替换界面、转到界面。分别负责文本的显示和交互、查找和替换的交互、转到指定行的交互。

主界面

  主界面比较简单,主要包含一个菜单栏、文本编辑框和状态栏。主界面在程序启动时显示,在程序退出时消失,如下图所示:

查找替换界面

  查找替换界面是一个Dialog窗口,包含一个查找框、一个替换框、两个查找按钮和两个替换按钮。查找替换界面在主界面菜单栏中点击查找和替换菜单时显示,在点击Dialog窗口的叉号后关闭,如下图所示:

转到界面

  转到界面也是一个Dialog窗口,包含一个转到行号的输入框、转到按钮和取消按钮。转到界面在主界面菜单栏中点击转到菜单时显示,在点击转到按钮、点击取消按钮或者点击Dialog窗口的叉号后关闭,如下图所示: