QT 实现电子相册(六)--总结

简介

前面几篇的讲解,我们已经完成QT电子相册的开发,这里做一个总结,说明各个类的功能,以及关联和使用情况。

类功能介绍

QMainWindow

该类主要用来管理主窗口,包括菜单的显示与交互等。
基本功能包括:
1   主界面显示为左侧的文件列表框和右侧的图片展示区,其内部包含目录树类和图片展示类的指针。
2   显示菜单项并将菜单项与点击逻辑关联。
3   支持打开和创建项目操作。
4   通过map管理所有创建或打开的项目,对于创建项目时,采取的是建立指定文件夹,对于打开项目时,直接打开指定的文件夹。

向导类Wizard

当我们创建项目时,会按步骤提示用户操作,需要用到向导类。该类继承于QWizard,重写了done函数,保证用户操作完成时发送SigProSettings信号给目录树类ProTree
向导类内部包含了两个向导页,一个是项目属性设置页面ProSetPage,一个是确认页面ConfirmPage
ProSetPage页面可以输入项目名称和路径,也支持打开文件夹自动录入路径功能。同时支持录入过程中检测输入是否合法,包括路径是否已经存在,项目名称是否已经存在等。这部分功能通过重写isComplete函数实现逻辑判断。
ConfirmPage用来确认用户操作,用户可以选择取消,如果取消则中止创建项目流程。

目录树ProTree类

该类主要控制主界面左侧显示目录树,包括基于目录树的一些操作,功能包括如下

1   接收向导类的SigProSettings信号,将项目添加至左侧目录区。
2   支持导入文件操作,右键项目名称在弹出菜单选择导入文件会弹出导入文件夹对话框,选择要导入的文件即可。
3   设置活动项目,设置为活动项目的条目会被指定为默认选中的项目,项目处于高亮并字体变粗。
4   轮播图播放,当点击轮播图播放时会依次播放目录树下的每张图片。
5   ProTree类内部管理了ui文件,ui文件中QTreeWidget被升级为我们自定义的ProTreeWidget类型。进而支持上述菜单操作。
成员函数和变量介绍:
1   Ui::ProTree *ui 表示ProTree的ui类。
2   AddProToTree 该函数和主界面发送的SigProSettings信号连接,在左侧创建目录文件夹。
3   GetTreeWidget 该函数返回ui内管理的ProTreeWidget对象的指针。

目录树ui类ProTreeWidget

该类继承于QTreeWidget类,用于实现目录列表,该类放在ProTree的ui文件里,将QTreeWidget升级为该类型,同时也可以响应主窗口发送过来的打开项目和创建项目信号。其功能包括如下:

1   包括一个集合_set_path,防止重复导入相同项目,规则为根据路径和项目名组合生成的字符串是否已经在集合中,如果在则不插入目录树。
2   支持右键点击item,生成弹出菜单,菜单包括导入文件,关闭项目,幻灯片放映以及设为启动项目等菜单项。
3   根据主界面发送的导入或创建项目信号,执行导入逻辑和创建逻辑。因为导入和创建逻辑会占用cpu,为提升性能,启动导入线程OpenTreeThread和创建线程ProTreeThread
4   导入和创建项目时更新进度条对话框
5   支持中途取消导入和创建项目。
6   支持双击条目显示图片,支持点击右侧显示区的切换按钮进行切换图片。
7   支持处理主界面发送的设置音乐请求

类成员说明如下:
1   _set_path缓存目录树中的项目名。
2   _action_import导入文件动作。
3   _action_setstart设置活动项动作。
4   _action_closepro关闭项目动作。
5   SlotItemPressed右键点击的槽函数弹出菜单。
6   _right_btn_item 缓存右键点击的item项。
7   _active_item 缓存设置的启动项。
8   _dialog_progress 导入文件时现实的进度对话框。

ProTreeThread类

该类继承自QThread,因为创建项目后,导入图片文件时耗时较长,所以启动这个线程。该线程响应外界的中止消息,并根据copy文件的进度向进度对话框通知进度。
类成员说明如下
1   _src_path文件源路径。
2   _dist_path文件目的路径。
3   _file_count表示已经复制的文件数
4   拷贝生成的目录树的当前节点的父节点。
5   _root表示拷贝生成的目录树的根节点。
6   _bstop表示是否停止。
7   SigUpdateProgress表示更新进度的信号
8   SigFinishProgress表示完成的信号。

OpenTreeThread类

OpenTreeThread 和ProTreeThread类似,所以不再赘述。

PicAnimationWid类

动画类,当点击左侧目录树选择播放幻灯片时,PicAnimationWid类负责播放动画。
主要类成员和功能如下:
1   SetPixmap函数设置图片,设置当前播放和即将播放的图片。
2   UpSelectPixmap 当点击左侧目录树item或者点击下方预览图时会触发该函数,用来更新播放的图片,进而切换播放的图片。
3   paintEvent重写了喷绘函数,实现双缓冲绘图,播放第一张图片alpha为255,第二章图片alpha为0,然后慢慢将第一张alpha变为0,第二张变为255,进而实现图片的渐隐渐显效果。
4   SlotStartOrStop 启动或停止动画的槽函数。
5   SlideNext,SlidePre向前和向后切换动画的槽函数。
6   TimeOut定时切换图片的槽函数。

PicShow类

PicShow类主要是管理右侧显示区域的。包括点击按钮的渐变变化,以及切换图片的显示功能。
1   ShowPreNextBtns用来实现按钮渐渐显示效果。
2   SlotUpdatePic更新显示的图片。
3   SlotSelectItem更新选中的item。

热门评论

热门文章

  1. 解密定时器的实现细节

    喜欢(566) 浏览(1851)
  2. C++ 类的继承封装和多态

    喜欢(588) 浏览(2575)
  3. slice介绍和使用

    喜欢(521) 浏览(1719)
  4. Linux环境搭建和编码

    喜欢(594) 浏览(5502)
  5. windows环境搭建和vscode配置

    喜欢(587) 浏览(1711)

最新评论

  1. 双链表实现LRU算法 secondtonone1:双链表插入和删除节点是本篇的难点,多多练习即可。
  2. 线程安全的无锁栈 secondtonone1:谢谢支持,如果pop的次数大于push的次数是会让线程处于重试的,这个是测试用例,必须满足push和pop的次数相同,实际情况不会这么使用。栈的设计没有问题。
  3. 再谈单例模式 secondtonone1:是的,C++11以后返回局部static变量对象能保证线程安全了。
  4. Linux环境搭建和编码 恋恋风辰:Linux环境下go的安装比较简单,可以不用设置GOPATH环境变量,后期我们学习go mod 之后就拜托了go文件目录的限制了。
  5. C++ 类的拷贝构造、赋值运算、单例模式 secondtonone1:好的,已修复。

个人公众号

个人微信