【Qt5开发及实例】32、实现键盘的监控操作
2015-03-14 21:41
423 查看
keyevent.h
/** * 书本:【Qt5开发及实例】 * 功能:实现键盘控制 * 文件:keyevent.h * 时间:2015年2月8日11:48:47 * 作者:cutter_point */ #ifndef KEYEVENT_H #define KEYEVENT_H #include <QWidget> #include <QKeyEvent> //键盘 #include <QPaintEvent> //绘画事件 #include <QPainter> class KeyEvent : public QWidget { Q_OBJECT public: KeyEvent(QWidget *parent = 0); ~KeyEvent(); void drawPix(); //绘画图像 void keyPressEvent(QKeyEvent *event); //键盘相应 void paintEvent(QPaintEvent *); private: QPixmap *pix; //缓冲图像 QImage image; //图片 int startX; int startY; int width; int height; int step; //每步的大小 }; #endif // KEYEVENT_H
keyevent.cpp
/** * 书本:【Qt5开发及实例】 * 功能:实现键盘控制 * 文件:keyevent.cpp * 时间:2015年2月8日11:48:47 * 作者:cutter_point */ #include "keyevent.h" KeyEvent::KeyEvent(QWidget *parent) : QWidget(parent) { setWindowTitle(tr("键盘事件")); this->setAutoFillBackground(true); QPalette palette = this->palette(); //取得调色板 palette.setColor(QPalette::Window, Qt::white); //设置背景默认颜色 this->setPalette(palette); //设置好调色板,使用调色板 this->setMinimumSize(512, 256); this->setMaximumSize(512, 256); width = this->size().width(); height = this->size().height(); //得到相应的长和高 pix = new QPixmap(width, height); //缓冲图形的大小 pix->fill(Qt::white); image.load(":/image.png"); //加载图片 startX = 100; startY = 100; step = 20; drawPix(); //绘图 resize(512, 256); } //void drawPix(); //绘画图像 void KeyEvent::drawPix() { pix->fill(Qt::white); QPainter *painter = new QPainter; //绘画工具 QPen pen(Qt::DotLine); //虚线 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 < 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); //图片绘制 painter->end(); } //keyPressEvent(QKeyEvent *event); //键盘相应 void KeyEvent::keyPressEvent(QKeyEvent *event) { if(event->modifiers() == Qt::ControlModifier) //是否有按下Ctrl { if(event->key() == Qt::Key_Left) //左 { startX = (startX - 1 < 0) ? startX : startX - 1; } if(event->key() == Qt::Key_Right) //右 { startX = (startX + image.width() > width) ? startX : startX + 1; } if(event->key() == Qt::Key_Up) //上 { startY = (startY - 1 < 0) ? startY : startY - 1; } if(event->key() == Qt::Key_Down) //下 { startY = (startY + image.height() > height) ? startY : startY + 1; } } else { startX = startX - startX % step; //化为step的倍数,后面好判定 startY = startY - startY % step; if(event->key() == Qt::Key_Left) //左 { startX = (startX - step < 0) ? startX : startX - step; } if(event->key() == Qt::Key_Right) //右 { startX = (startX + step + image.width() > width) ? startX : startX + step; } if(event->key() == Qt::Key_Up) //上 { startY = (startY - step < 0) ? startY : startY - step; } if(event->key() == Qt::Key_Down) //下 { startY = (startY + image.height() + step > height) ? startY : startY + step; } if(event->key() == Qt::Key_Home) //起点 { startX = 0; startY = 0; } if(event->key() == Qt::Key_End) //终点 { startX = width - image.width(); startY = height - image.height(); } } drawPix(); this->update(); } //void paintEvent(QPaintEvent *); void KeyEvent::paintEvent(QPaintEvent *) { QPainter painter; painter.begin(this); painter.drawPixmap(QPoint(0, 0), *pix); //把图像画到空间,显示 painter.end(); } KeyEvent::~KeyEvent() { }
资源图片:
运行:
相关文章推荐
- 【Qt5开发及实例】16、实现一个简单的文本编辑器(over)
- 【Qt5开发及实例】15、实现一个简单的文本编辑器4
- 【Qt5开发及实例】13、实现一个简单的文本编辑器2
- Android游戏开发:实现手势操作切换图片的实例
- Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
- 【Qt5开发及实例】14、实现一个简单的文本编辑器3
- 04 实现图像与键盘的交互操作-DirectX游戏开发
- 【Qt5开发及实例】29、实现服务器端的编程,UDP协议
- Python之虚拟机操作:利用VIX二次开发,实现自己的pyvix(系列一)成果展示和python实例
- 【Qt5开发及实例】20、实现一个飞舞的蝴蝶
- 【Qt5开发及实例】35、实现单元测试
- C#软件开发实例.私人订制自己的屏幕截图工具(八)添加键盘操作截图的功能
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- Qt5主窗体程序: 文本编辑器的实现(Qt5开发及实例)
- 【Qt5开发及实例】30、实现客户端的编程,UDP协议
- 【Qt5开发及实例】25、实现代理的功能
- 【Qt5开发及实例】12、实现一个简单的文本编辑器1
- C#软件开发实例.私人订制自己的屏幕截图工具(八)添加键盘操作截图的功能
- Qt5主窗体程序: 文本编辑器的实现(Qt5开发及实例)