自学QT之键盘事件
来源:互联网 发布:四大网络交流平台 编辑:程序博客网 时间:2024/06/02 06:13
首先新建一个项目:为了方便,直接拷贝的书上源码,书为《QT5开发及实例(第二版)》
头文件:
#ifndef KEYEVENT_H#define KEYEVENT_H#include <QWidget>#include <QKeyEvent>#include <QPaintEvent>class KeyEvent : public QWidget{ Q_OBJECT public: KeyEvent(QWidget *parent = 0); ~KeyEvent(); void drawPix(); void keyPressEvent(QKeyEvent *); void paintEvent(QPaintEvent *);private: QPixmap *pix; QImage image; int startX; int startY; int width; int height; int step;};#endif // KEYEVENT_H
源代码:
#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);
}
KeyEvent::~KeyEvent()
{
}
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();
}
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();
}
}
drawPix();
update();
}
void KeyEvent::paintEvent(QPaintEvent *)
{
QPainter painter;
painter.begin(this);
painter.drawPixmap(QPoint(0,0),*pix);
painter.end();
}
运行图:
0 0
- 自学QT之键盘事件
- 自学QT之QML实现响应鼠标和键盘事件
- 自学qt之 事件
- 自学QT之鼠标事件
- 自学QT之事件过滤
- qt学习之键盘事件( keyPressEvent)
- qt之键盘、鼠标事件处理
- Qt中的键盘事件
- Qt中的键盘事件
- Qt键盘事件
- Qt中的键盘事件
- Qt键盘事件
- Qt键盘事件
- Qt键盘事件
- qt 键盘事件......
- Qt键盘事件
- Qt键盘事件
- Qt中的键盘事件
- mobile angualar ui的简单使用
- linux下的各种函数库略读(POSIX C和ANSI C、GNU C以及ISO C、glib、libc、glibc)
- 数据库JDBC的连接
- 操作系统的中断与异常(陷阱)
- 数组存储字符串
- 自学QT之键盘事件
- 32位的VS通过odbc数据源访问64位Oracle
- test7.17
- 操作Excel工具类(基于Apache的POI类库)
- 面向连接的Socket Server的简单实现
- Xcode7编译崩溃,报错如下——解决办法
- (乙)1015. 德才论
- Project facet Java version 1.8 is not supported.
- Android UI系列-----EditText和AutoCompleteTextView