其实没有那么正式啦,我的需求分析目的非常的明确,就是把界面大致给勾勒出来,后面在类设计阶段就好理思路些。
熟悉Qt编程的都喜欢将QMainWindow作为主界面,当然,我也不例外了,在主界面上我会装上些部件:
菜单、工具栏、主视图、状态栏。
一 菜单:
这里面我想了想,还是有些东西的。我列出了4个功能菜单。
1 文件:
文件菜单还蛮重要的,首先就是可以保存用户输入的点,这样用户下一次可以选择打开之前输入的点文件,然后可以在这之上修改一下,或者直接使用,非常方便了,不然还要造点,估计比较麻烦。
1)打开:
可以打开点文件。
2)新建:
可以新建一个点文件。
3)保存:
将点保存在一个点文件中,这里应该有默认的位置和文件名。
4)关闭:
将当前的点文件关闭掉。
5)另存为:
可以将当前点不存在默认位置,自己指点位置。
6)退出:
就是退出程序。
2 点操作:
这个菜单项就是关于一些图形的操作了,由于凸壳算法中首先必须要知道点坐标,当然这里的点坐标都是整数了,那么点怎么来,肯定得用户自己输入,那么这个菜单项就给了用极大的发挥。
1)输入点:
我将输入点分为了单点输入和多点随机输入,单点输入,简单就是用户鼠标点一个输入一个,多点随机输入完全作者自创,用户可以在主视图区域内画个矩形,那么程序就可以在这个矩形区域内随机输入n个点,至于这个n值,就的配置文件里面的参数说了算了。
2)移动点:
用户可能输入了点感觉想要修改,那么绝对可以,我将移动点分为了单点移动和多点移动,单点移动,简单,就是指定点移动即可,多点移动需要用户先选择矩形区域,然后就可以将矩形区域里面的点移动了。
3)删除点:
也是为用户着想的,我分为单点删除和多点删除,和上面类似,多点就是要将用户画出的矩形区域内的点给删除掉。
4)取消:
这个取消的意思是取消当前用户的点操作。
3 线程操作:
听起来有些新鲜吧,这里绝对是作者原创,关于线程,我在上一篇文章中有提到,一个负责算法(生产者),也就是将需要的操作放入操作队列中,一个线程(消费者)负责检查操作队列,然后通知有关的绘制操作。因此对于两个线程我想来想去,还是的有些控制吧,比如用户想在某个时间点上停止绘制,看看当前的状态,那么我必须得满足这样用户的要求。
1)启动:
把两个线程都打开即可。
2)暂停:
可以让两个线程暂时睡眠一会儿。
3)终止:
结束两个线程的生命。
这里还得多唠叨两句,为什么都是两个线程一起来,我也想着把两个线程的操作分开,后来仔细琢磨,其实没必要,因为当一个线程暂停过后,另一个也的睡眠会儿,当然这是指先暂停生产者线程,因为生产者没有生产了,那么消费者也就自然不去消费了,那么也会暂停。如果先暂停的是消费者,那么就不会出现生产者暂停,显然,我们这里的生产者不会去关注消费者的消费情况。按照这样想来,还不如将两个线程同时操作更好,因为后者的话已经违背了我的初衷------多线程编程。
4 配置:
这个菜单项很简单了,就是一个配置界面而已了。
1)配置界面:
但是这个配置界面可不简单啦,东西很多的,包括了对程序中所有的配置。比如点的配置就有点的大小,点内填充色,点的外圈色,还有连接点的线的颜色、宽度等,在有如绘制线程的速度也的控制了,一般采用睡眠解决,那么就有睡眠多长时间在进行绘制,同样也要配置算法线程了,还有很多的,后面在一一介绍。
二 工具栏:
工具栏大家熟悉得不能在熟悉了,就是将菜单功能在上面弄个快捷键而已啦。
三 主视图:
主视图就是中间比较大的那个用来绘制的部件了,这个视图里面接受用户操作的比较多,估计设计的时候还得把握好才行。
四 状态栏:
这个其实我又玩了一把创意,将这里加了个滑动条部件,这个部件干嘛用呢,其实都是为了用户着想的,如果将整个动画放完后还可以回放的话,用户可能会更加的喜欢吧!这样用户想在哪里看就在哪里看,岂不是很爽哉!
后语:
其实要完成这些功能需要了解的知识还是很多的,简单需求分析了一把,不过仔细来想想,应该问题不大,应为这里并没有用到什么数据库之类的,这主要就是考虑到数据量非常小了,1000个点以内足以吧,想想,如果数据量超级大的话,估计用户输入点得花时间,而且一味的演示等于自杀,因为有些悟性好的估计一会儿就看出算法的过程来了。没必要模拟出很多点的。想到这些,估计难度不大,我的目的其实也很简单了,就是把之前学习的内容关于Qt的和多线程通过程序巩固一下啦!
这里插个图片,感觉Qt的图标很漂亮!