QT-键盘事件

键盘事件的获取是通过重定义QWidget的keyPressEvent()和keyReleaseEvent()来实现。
1.移动小猴子的知识点:
QPixmap:是一个绘图设备
pix = new QPixmap(width,height) 是要绘多大的布
pix->fill(Qt::red);  布的填充颜色
QPainter * painter = new QPainter(pix); 创建一支画笔

2.在drawPix函数中,每次都创建了一个画笔,如果在后面不delete painter
会出现如下错误:
QPainter::begin: A paint device can only be painted by one painter at a time.
QPainter::setPen: Painter not active

分析原因: 一个绘图设备只能一次被一个painter调用 你程序里有2个painter  
第一次painter的地址如下:

如果不delete掉,内存分配有可能还是那个地址。而一个绘图设备只能一次被一个painter调用。所以要把painter delete.
获得另外的地址,如下图:

3.第一次绘制网格和猴子之后,我觉得是猴子在改变位置。但是网格没有必要再画一遍。
  但结果是:我在构造函数里只调用了一次drawPix(),在后面改变猴子位置触发键盘事件之后,我只绘画了猴子。
   这样子是错误的,程序运行到这里,没有网格,但逻辑上应该有猴子的。    
   想不明白~
4.paintEvent事件
  在窗口部件第一次显示时,系统会自动产生一个绘图事件,从而强制绘制这个窗口部件。
  当重新调整窗口部件的大小时,系统也会产生一个绘制事件。
  当窗口部件被其他窗口部件遮挡,然后又再次显示出来的时候,就会对那些隐藏的区域产生一个绘制事件。
  update()函数强制产生一个绘画事件,只是在Qt下一次处理事件时才调用一次绘制事件。

  如果多次调用update(),Qt会把连续多次的绘制事件压缩成一个单一的绘制事件,这样可避免闪烁现象

代码:https://github.com/Jelly-123/Qt_code/tree/master/face_monkey

你可能感兴趣的:(QT)