Qt鼠标键盘事件
来源:互联网 发布:纽易网络 编辑:程序博客网 时间:2024/05/21 17:16
mouseevent.h
#ifndef MOUSEEVENT_H#define MOUSEEVENT_H#include <QMainWindow>#include <QLabel>#include <QStatusBar>#include <QMouseEvent>class MouseEvent : public QMainWindow{ Q_OBJECTpublic: MouseEvent(QWidget *parent = 0); ~MouseEvent();protected: void mousePressEvent(QMouseEvent *e);//鼠标按下 void mouseMoveEvent(QMouseEvent *e);//鼠标移动 void mouseReleaseEvent(QMouseEvent *e);//鼠标释放 void mouseDoubleClickEvent(QMouseEvent *e);//鼠标双击private: QLabel *statusLabel;//按下或释放位置 QLabel *MousePosLabel;//当前位置};#endif // MOUSEEVENT_H
mouseevent.cpp
#include "mouseevent.h"MouseEvent::MouseEvent(QWidget *parent) : QMainWindow(parent){ setWindowTitle(tr("鼠标事件")); statusLabel = new QLabel; statusLabel->setText(tr("当前位置:")); statusLabel->setFixedWidth(100); MousePosLabel = new QLabel; MousePosLabel->setText(tr("")); MousePosLabel->setFixedWidth(100); //为窗口statusBar()添加控件 statusBar()->addPermanentWidget(statusLabel); statusBar()->addPermanentWidget(MousePosLabel); this->setMouseTracking(true); resize(400,200);}MouseEvent::~MouseEvent(){}void MouseEvent::mousePressEvent(QMouseEvent *e){ QString str="("+QString::number(e->x())+","+QString::number(e->y())+")"; if(e->button()==Qt::LeftButton) { statusBar()->showMessage(tr("左键:")+str); } else if(e->button()==Qt::RightButton) { statusBar()->showMessage(tr("右键:")+str); } else if(e->button()==Qt::MidButton) { statusBar()->showMessage(tr("中键:")+str); }}void MouseEvent::mouseMoveEvent(QMouseEvent *e){ MousePosLabel->setText("("+QString::number(e->x())+", "+QString::number(e->y())+")");}void MouseEvent::mouseReleaseEvent(QMouseEvent *e){ QString str="("+QString::number(e->x())+","+QString::number(e->y())+")"; statusBar()->showMessage(tr("释放在:")+str,3000);}void MouseEvent::mouseDoubleClickEvent(QMouseEvent *e){ QString str="("+QString::number(e->x())+","+QString::number(e->y())+")"; statusBar()->showMessage(tr("双击:")+str);}
keyevent.h
#ifndef KEYEVENT_H#define KEYEVENT_H#include <QWidget>#include <QKeyEvent>#include <QPaintEvent>class KeyEvent : public QWidget{ Q_OBJECTpublic: 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
keyevent.cpp
#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=24; drawPix(); resize(512,256);}KeyEvent::~KeyEvent(){}void KeyEvent::drawPix(){ pix->fill(Qt::red); QPainter *painter = new QPainter; QPen pen(Qt::SolidLine);//绘制实线 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鼠标键盘事件
- Qt 鼠标事件,键盘事件
- Qt事件总结(鼠标、键盘)
- Qt事件总结(鼠标、键盘)
- QT 鼠标事件 键盘事件 的属性
- Qt 键盘、鼠标事件的处理
- QT中监控全局键盘鼠标事件
- QT中监控全局键盘鼠标事件
- qt之键盘、鼠标事件处理
- Qt 键盘、鼠标事件的处理
- QT事件处理,鼠标事件,按键键盘事件,定时器,进度条。
- Qt如何向系统发送键盘和鼠标事件?
- Qt如何向系统发送键盘和鼠标事件?
- Qt Quick事件处理之鼠标、键盘、定时器
- Qt Quick事件处理之鼠标、键盘、定时器
- 自学QT之QML实现响应鼠标和键盘事件
- QT:如何获取鼠标坐标点和键盘响应事件
- Codeforces 476A
- 从密码到token, 一个授权的故事
- str_replace()、preg_replace()、strtr()三者的区别和用法
- 详解数据挖掘与机器学习的区别与联系
- 如何严格设置php中session过期时间
- Qt鼠标键盘事件
- python学习笔记(3)——循环
- [jzoj]3526. 【NOIP2013模拟11.7A组】不等式(solve)(类欧几里得)
- 面试题57:删除链表中重复的结点
- spring与redis整合(一)--采用原生的jedis(ShardedJedisPool)
- Andriod5.0新特性
- java-day05-Thread-基础知识以及运用API第一种方法使用Thread类
- 【Eternallyc】JAVA语法-instanceof运算符
- 深搜记录路径——部分和问题