#include "keyevent.h"
keyevent::keyevent(QWidget *parent)
: QWidget(parent)
{
setWindowTitle("键盘事件测试");
//setAutoFillBackground(true);
// QPalette是Qt中调度板类
QPalette plet=this->palette();
plet.setColor(QPalette::Window,Qt::white);
setPalette(plet);
setMinimumSize(800,600);
setMaximumSize(800,600);
width=size().width();
height=size().height();
pix=new QPixmap(width,height);
pix->fill(Qt::white);
image.load("f:/connect.ico");
startx=60;
starty=60;
step=30;
drawpixfunc();//调用函数绘制
resize(800,600);
}
keyevent::~keyevent()
{
}
void keyevent::drawpixfunc()
{
pix->fill(Qt::green);
QPainter *painter=new QPainter;
QPen pen(Qt::DashDotLine); // 点划线
for(int i=step;i<width;i=i+step)//竖线
{
painter->begin(pix);
painter->setPen(pen);
painter->drawLine(QPoint(i,0),QPoint(i,height));
painter->end();
}
for(int j=step;j<width;j=j+step)//横线
{
painter->begin(pix);
painter->setPen(pen);
painter->drawLine(QPoint(0,j),QPoint(width,j));
painter->end();
}
painter->begin(pix);
painter->drawImage(QPoint(startx,starty),image);
painter->end();
}
void keyevent::paintEvent(QPaintEvent *)
{
QPainter pt;
pt.begin(this);
pt.drawPixmap(QPoint(0,0),*pix);
pt.end();
}
void keyevent::keyPressEvent(QKeyEvent *evt)//键盘按钮控制老虎动向
{
startx=startx-startx%step;
starty=starty-starty%step;
if(evt->key()==Qt::Key_Left)
{
startx=(startx-step<0)?startx:startx-step;
}
if(evt->key()==Qt::Key_Right)
{
startx=(startx+step+image.width()>width)?startx:startx+step;
}
if(evt->key()==Qt::Key_Up)
{
starty=(starty-step<0)?starty:starty-step;
}
if(evt->key()==Qt::Key_Down)
{
starty=(starty+step+image.width()>height)?starty:starty+step;
}
//调用绘制
drawpixfunc();
update();
}
#ifndef KEYEVENT_H
#define KEYEVENT_H
#include <QWidget>
#include <QKeyEvent>
#include <QPaintEvent>
#include <QPainter>
class keyevent : public QWidget
{
Q_OBJECT
public:
keyevent(QWidget *parent = nullptr);
~keyevent();
void drawpixfunc();
void paintEvent(QPaintEvent *);
void keyPressEvent(QKeyEvent *);//键盘按钮控制老虎动向
private:
QPixmap *pix;
QImage image;
int startx;
int starty;
int width;
int height;
int step; //步长
};
#endif // KEYEVENT_H