这篇文章主要会讲实现连连看时,需要的Qt功能点有哪些,也许后期会剔除一些,我也只是凭我经验来写所需要的Qt功能。
布局:布局上我设置了两个widget,一个当做主窗口来使用PlayWindow,另一个作为图片的容器来使用PicFrame;主窗口中我用的是网格布局QGridLayout,涉及到的代码如下:
载入图片时的凹凸感:这个的实现我感觉是有点别扭的,我是在图片的容器PicFrame上加了QFrame控件,然后再在QFrame上加了一个QLabel控件;而主要的凹凸感就由QFrame控件来实现,QLabel就负责载入图片。
凹凸感实现的代码如下:
前两个实现的功能与setFrameStyle是一样的,并可以在ui上进行修改;需要注意的是如果QFrame是作为容器的PicFrame控件来使用时,那么设置setFrameStyle就不会有效果;必须是子控件的QFrame才能使用setFrameStyle来实现凹凸感。
点击事件:实现的效果是点击PicFrame控件,然后在QFrame控件上画矩形框,并且点击之后只会有一个QFrame控件上有矩形框。
点击PicFrame控件,重画事件本来是写在这个控件中的,但由于要在QFrame控件上实现显示一个矩形框的效果,所以我把重画事件放到主窗口中的PlayWindow中实现。
PicFrame中只负责鼠标的点击与释放,并发出信号给主窗口;代码如下:
信号与槽的关联已在布局中给出。
主窗口PlayWindow中有槽pressSlot进行响应,主要功能是把点击的PicFrame控件指针传给PlayWindow与刷新。然后刷新重画的接口paintEvent就会被调用;代码如下:
在paintEvent中注释掉的代码,各个参数的值是跟没注释掉的代码值是一样的,但不知道为什么不能正常显示矩形框。其中getFrame接口是通过ui->frame->geometry()来返回QRect
geometry与rect的区别:rect接口在单独用PicFrame控件来重画矩形框时,画PicFrame控件是没问题的,但画QFrame控件就不行了,而用geometry来画则都可以的。原因是rect画都是从(0,0)点开始画的,就算你是在一个控件中的子控件也是从(0,0)开始的,而geometry则是相对的。
整一个实现的效果图如下: