Qt学习之一,键盘事件细节
来源:互联网 发布:linux文件列表 编辑:程序博客网 时间:2024/06/01 09:30
7.20Qt学习蛋疼的第三天
在这里小小的抱怨一下,这几天学到了啥?哈?
在写之前加上一些小笔记。。。
怎样获取comboBox中的选定项值, 答:currentIndex()
今天老师“讲了”一个小模块,是键盘事件,自己感觉比较感兴趣的,于是决定把代码中的细节搞清楚些。
首先是头文件keyevent.h中的代码
#include<QWidget>#include<QKeyEvent>//键盘事件库引入#include<QPaintEvent>class keyEvent : public QWidget{ Q_OBJECT//至关重要,在网上查的:如果有Dialog或者MainWindows运行的话,Q_OBJECT是至关重要的public: KeyEvent(QWidget *parent = 0); ~KeyEvent(); void drawPix(); void keyPressEvent(QKeyEvent *); void paintEvent(QPainEvent *);private: QPixmap *pix; QImage image; int starX; int starY; int width; int height; int step;};
其中
QPixmap *pix:作为一个绘图设备,使用双缓冲机制实现图形的绘制
QImage image:界面中间的小图标设定
int starX、int starY:图标的左上角顶点位置
int width、int height:界面的宽度和高度
int step:网格的大小,即移动的步进值
然后就是keyevent.cpp的内容
#include<QPainter>#include"keyevent.h"KeyEvent::KeyEvent(QWidget *parent):QWidget(parent){ setWindowTitile(tr("键盘事件"));//设置窗口顶部的标题 setAutoFillBackground(true); //palette是调色板的意思 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);//此QPixmap对象用来准备随时接收绘制的内容 pix->fill(Qt::white);//填充背景色为白色 image.load("../image/image.png");//给image这个图片定义一个具体图片…&**%%¥¥…&@#!@#¥(=。=) starX = 100; stary = 100; step = 20; drawPix(); resize(512,256);}
还有一点就是图片的位置,在以上代码中,位置为../image/image.png在实际操作中,image.png图片的位置是当前cpp文件上级文件夹中的image文件夹中…好乱(=。=)
下面是drawPix()函数的实现
drawPix()函数实现了在QPixmap对象上绘制图像,其具体代码如下:
void KeyEvent::drawPix(){ pix->fill(Qt::white); QPainter *painter = new QPainter; QPen pen(Qt::DoLine);//QPen类定义了一个QPainter应该如何绘制线条和轮廓的形状。 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(starX,starY),image); painter->end();}
其中
pix->fill(Qt::white):重新刷新pix对象为白色底色
QPainter *painter = new QPainter:创建一个QPainter对象,并指定pix为绘图设备
QPen pen(Qt::DotLine):创建一个QPen对象,设置画笔的线型为Qt::DotLine,用于绘制网格
for(int i=step;i
void KeyEvent::keyPressEvent(QKeyEvent *event){ if(event->modifiers()==Qt::ControlModifier)//判断修饰键【Ctrl】是否按下 { if(event->key()==Qt::Key_Left)//根据按下的左方向键调节图标左上顶点的位置 { startX=(starX-1<0)?startX:startX-1; } if(event->key()==Qt::Key_Right)//根据按下的右方向调节图标的左上顶点的位置,进步值为1 { starX=(startX+1+image.width()>width)?startX:startX+1; } if(event->key()==Qt::Key_Up) { startY=(startY-1<0)?startY:stayY-1; } if(event->key()==Qt::Key_Down) { 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) { 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+step+image.width()>width)?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();//根据调整后的图标位置重新再pix中绘制图像 update();//触发界面重画}
最后是painEvent()界面重画函数,将pix绘制在界面上
void KeyEvent::paintEvent(QPaintEvent *){ QPainter painter; painter.begin(this); painter.drawPixmap(QPoint(0,0),*pix); painter.end;}
其中
Qt::KeyboardModifier定义了一系列修饰键,如下所示:
Qt::NoModifier 没有修饰键按下
Qt::ShiftModifier 【Shift】键按下
Qt::ControlModifier 【Ctrl】键按下
Qt::AltModifier 【Alt】键按下
Qt::MetaModifier Meta键按下
Qt::KeypadModifier 小键盘按键按下
Qt::GroupSwitchModifier Mode switch键按下
- Qt学习之一,键盘事件细节
- qt学习之键盘事件( keyPressEvent)
- Qt中的键盘事件
- Qt中的键盘事件
- Qt键盘事件
- Qt中的键盘事件
- Qt键盘事件
- Qt键盘事件
- Qt键盘事件
- qt 键盘事件......
- Qt键盘事件
- Qt键盘事件
- Qt中的键盘事件
- Qt中的键盘事件
- Qt键盘事件
- Qt修改键盘事件
- Qt键盘事件 ESC
- Qt键盘事件
- shell内部命令和外部命令
- 1336 - Fixing the Great Wall(DP)
- 欢迎使用CSDN-markdown编辑器
- 使用中国网建实现Java向手机发送短信的功能
- Android应用开发之(WebView中loadData与loadDataWithBaseURL的使用上的区别)
- Qt学习之一,键盘事件细节
- glActiveTexture
- OC中的数组
- HDU4344 Mark the Rope pollard_rho大整数分解应用
- JavaScript权威指南_131_第15章_脚本化文档_15.6-创建、 插入、删除节点-DocumentFragment
- hdu4405Aeroplane chess 概率dp水题
- HDU1005 Number Sequence
- web技术发展史
- S3C2410的触摸屏控制