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();}
原创粉丝点击