#include "keyevent.h"
#include <QPainter>
KeyEvent::KeyEvent(QWidget *parent)
: QWidget(parent)
{
setWindowTitle(tr("键盘事件"));
setAutoFillBackground(true);
QPalette palette = this->palette();
palette.setColor(QPalette::Window,Qt::white);
setPalette(palette);
setMinimumSize(512,256);
setMaximumSize(512,256);
width=size().width();
height=size().height();
pix = new QPixmap(width,height);
pix->fill(Qt::white);
image.load("../image/image.png");
startX=100;
startY=100;
step=20;
drawPix();
resize(512,256);
}
void KeyEvent::drawPix()
{
pix->fill(Qt::white); //重新刷新pix对象为白色底色
QPainter *painter = new QPainter; //创建一个QPainter对象
QPen pen(Qt::DotLine); //(a)
for(int i=step;i<width;i=i+step) //按照步进值的间隔绘制纵向的网格线
{
painter->begin(pix); //指定pix为绘图设备
painter->setPen(pen);
painter->drawLine(QPoint(i,0),QPoint(i,height));
painter->end();
}
for(int j=step;j<height;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); //(b)
painter->end();
}
void KeyEvent::keyPressEvent(QKeyEvent *event)
{
if(event->modifiers()==Qt::ControlModifier) //(a)
{
if(event->key()==Qt::Key_Left) //(b)
{
startX=(startX-1<0)?startX:startX-1;
}
if(event->key()==Qt::Key_Right) //(c)
{
startX=(startX+1+image.width()>width)?startX:startX+1;
}
if(event->key()==Qt::Key_Up) //(d)
{
startY=(startY-1<0)?startY:startY-1;
}
if(event->key()==Qt::Key_Down) //(e)
{
startY=(startY+1+image.height()>height)?startY:startY+1;
}
}
else //对【Ctrl】键没有按下的处理
{
/* 首先调节图标左上顶点的位置至网格的顶点上 */
startX=startX-startX%step;
startY=startY-startY%step;
if(event->key()==Qt::Key_Left) //(f)
{
startX=(startX-step<0)?startX:startX-step;
}
if(event->key()==Qt::Key_Right) //(g)
{
startX=(startX+step+image.width()>width)?startX:startX+step;
}
if(event->key()==Qt::Key_Up) //(h)
{
startY=(startY-step<0)?startY:startY-step;
}
if(event->key()==Qt::Key_Down) //(i)
{
startY=(startY+step+image.height()>height)?
startY:startY+step;
}
if(event->key()==Qt::Key_Home) //(j)
{
startX=0;
startY=0;
}
if(event->key()==Qt::Key_End) //(k)
{
startX=width-image.width();
startY=height-image.height();
}
}
drawPix(); //根据调整后的图标位置重新在pix中绘制图像
update(); //触发界面重画
}
void KeyEvent::paintEvent(QPaintEvent *)
{
QPainter painter;
painter.begin(this);
painter.drawPixmap(QPoint(0,0),*pix);
painter.end();
}
KeyEvent::~KeyEvent()
{
}
没有合适的资源?快使用搜索试试~ 我知道了~
Qt5开发及实例-CH1102.rar,Qt5实现键盘控制图标的移动来介绍键盘事件的应用的代码
共10个文件
cpp:2个
db:2个
png:2个
需积分: 1 1 下载量 186 浏览量
2023-09-15
17:45:36
上传
评论
收藏 17KB RAR 举报
温馨提示
Qt5开发及实例,实例CH1102,下面通过实现键盘控制图标的移动来介绍键盘事件的应用,如图11.2所示。 具体实现步骤如下。 (1)头文件“keyevent.h”的具体内容。 (2)源文件“keyevent.cpp”的具体代码。 (3)在项目工程所在目录(D:\Qt\CH11\CH1102\KeyEvent)下新建一个文件夹命名为image,在文件夹内保存一个名为“image.png”的图片;在项目中按照以下步骤添加资源文件。
资源推荐
资源详情
资源评论
收起资源包目录
Qt5开发及实例_CH1102.rar (10个子文件)
CH1102
KeyEvent
keyevent.cpp 3KB
keyevent.qrc 110B
image
image.png 4KB
Thumbs.db 5KB
KeyEvent.pro 1KB
main.cpp 179B
keyevent.h 697B
KeyEvent.pro.user 23KB
image
image.png 4KB
Thumbs.db 5KB
共 10 条
- 1
资源评论
华为奋斗者精神
- 粉丝: 8203
- 资源: 241
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于matlab实现用有限元法计算电磁场的Matlab工具 .rar
- 基于matlab实现有限元算法 计算电磁场问题 边界条件包括第一类边界和第二类边界.rar
- 基于matlab实现用于计算不同车重下的电动汽车动力性和经济性.rar
- 基于matlab实现遗传算法求解多车场车辆路径问题 有多组算例可以用.rar
- 浏览器.apk
- 基于matlab实现是一个matlab中的power system 中搭建的一个模型
- 基于JSP毕业设计-教学管理系统(源代码+论文).zip
- 基于JSP毕业设计-家政管理系统-毕业设计.zip
- 基于Python实现淘宝商品评论采集(含逆向)源代码
- 基于matlab实现多目标进化算法NSGAⅡ&Matlab讲解.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功