Qt浅谈之十五:键盘控制移动
来源:互联网 发布:易语言端口转发源码 编辑:程序博客网 时间:2024/06/07 03:51
一、简介
键盘事件的简单应用,通过键盘控制界面上图标的移动。参考的是书上的代码,主要是觉得有趣,修改了一些不足,并加入了随意拉大窗口的部分代码。
二、运行图
(1)本程序运行如下图1所示。
三、详解
1、缩放图标
- image.load(":/images/1.png");
- QMatrix martix;
- martix.scale(0.5,0.5);
- image = image.transformed(martix);
- setMinimumSize(image.width(),image.height());
2、画白色背景图
- pix = new QPixmap(width,height);
- pix->fill(Qt::white);
- void KeyEvent::paintEvent(QPaintEvent *)
- {
- QPainter painter(this);
- drawPix();
- painter.drawPixmap(QPoint(0,0),*pix);
- }
3、在背景图上画虚线表格
- void KeyEvent::drawPix()
- {
- pix->fill(Qt::white);
- QPainter *painter = new QPainter(pix);
- QPen pen(Qt::DotLine);
- painter->setPen(pen);
- for(int i=step;i<width;)
- {
- painter->drawLine(QPoint(i,0),QPoint(i,height));
- i=i+step;
- }
- for(int j=step;j<height;)
- {
- painter->drawLine(QPoint(0,j),QPoint(width,j));
- j=j+step;
- }
- painter->drawImage(QPoint(startX,startY),image);
- delete painter;
- }
分析:在背景图之上画虚线和小人图标,也可以在主窗口上绘制,这样背景图只是调整背景颜色值。但此时要注意:绘制顺序不能变,先背景图再虚线接着小人图标。
4、控制移动
- void KeyEvent::keyPressEvent(QKeyEvent *event)
- {
- if(event->modifiers() == Qt::ControlModifier)
- {
- if(event->key() == Qt::Key_Left)
- {
- startX=(startX-1<0)?startX:startX-1;
- }
- if(event->key() == Qt::Key_Right)
- {
- startX=(startX+1+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+1+image.height()>height)?startY:startY+1;
- }
- }
- else
- {
- startX=startX-startX%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+step+image.height()>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();
- }
- }
- update();
- }
5、窗口大小变化
- void KeyEvent::resizeEvent(QResizeEvent *event)
- {
- width=size().width();
- height=size().height();
- startX=(startX + image.width()>width)?width-image.width():startX;
- startY=(startY+image.height()>height)?height-image.height():startY;
- if (pix) {
- delete pix;
- pix = NULL;
- }
- pix = new QPixmap(width,height);
- update();
- }
0 0
- Qt浅谈之十五:键盘控制移动
- Qt浅谈之十五:键盘控制移动
- QT项目之键盘控制光标移动
- unity 键盘控制移动
- 键盘控制div移动
- 键盘控制小球移动
- 键盘控制移动
- 键盘控制马里奥移动
- GUI 剖析之 键盘方向键控制鼠标移动的实现
- OpenGL键盘控制图形移动
- SDL lesson16 键盘控制移动
- 通过键盘控制物体移动
- unity键盘控制人物移动
- 键盘控制图片移动事件
- Unity3d键盘控制角色移动
- Unity3d 键盘控制人物移动
- 键盘控制DIV块移动
- Qt浅谈之二十五2048游戏(原始代码来自网络)
- h2database源码浅析:MVTable与MVIndex
- Qt浅谈之十七:飞舞的蝴蝶(GraphicsView框架)
- WebView、HTML5与PhoneGAP框架——Day02_1
- NSNumber 学习
- 我的助理辞职了—刘苏
- Qt浅谈之十五:键盘控制移动
- Spring整合Hibernate
- MySql与Java的时间类型
- 算法剖析之选择排序与插入排序
- Qt浅谈之抓图截屏
- Java自学视频整理(持续更新中...)
- 域名naichabiao.com和京东是怎么联系上的
- CentOS下Qt窗口透明效果失效,成黑色背景的问题
- 巧用HTML标签优化XML中的布局