.pro
#-------------------------------------------------
#
# Project created by QtCreator 2016-05-30T22:20:17
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = mykeyevent
TEMPLATE = app
SOURCES += main.cpp\
widget.cpp
HEADERS += widget.h
FORMS += widget.ui
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QKeyEvent>
#include <QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
setFocus();
keyUp = false;
keyLeft = false;
move = false;
}
Widget::~Widget()
{
delete ui;
}
void Widget::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_Up) {
if(event->isAutoRepeat()) return;
keyUp = true;
}
else if (event->key() == Qt::Key_Left) {
if (event->isAutoRepeat()) return;
keyLeft = true;
}
}
void Widget::keyReleaseEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_Up) {
if (event->isAutoRepeat()) return;
keyUp = false;
if (move) {
move = false;
return;
}
if (keyLeft) {
ui->pushButton->move(30, 80);
move = true;
} else {
ui->pushButton->move(120, 80);
}
}
else if (event->key() == Qt::Key_Left) {
if (event->isAutoRepeat()) return;
keyLeft = false;
if (move) {
move = false;
return;
}
if (keyUp) {
ui->pushButton->move(30, 80);
move = true;
} else {
ui->pushButton->move(30, 120);
}
}
else if (event->key() == Qt::Key_Down) {
ui->pushButton->move(120, 120);
}
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
bool keyUp;
bool keyLeft;
bool move;
protected:
void keyPressEvent(QKeyEvent *event);
void keyReleaseEvent(QKeyEvent *event);
};
#endif