.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
QPushButton *btn;
protected:
void keyPressEvent(QKeyEvent *);
void moveRandomDirection();
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
.cpp
#include "widget.h"
#include "ui_widget.h"
#include "QKeyEvent"
#include "QApplication"
#include "QTimer"
#include "QTime"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
resize(500,500);
btn = new QPushButton("可移动", this);
btn->setGeometry(40,40,60,30); // 设置按钮位置
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(moveRandomDirection()));
timer->start(1000); // 每秒触发一次定时器
}
Widget::~Widget()
{
delete ui;
}
void Widget::keyPressEvent(QKeyEvent *e)
{
int x = btn->x(); //获取按钮x坐标
int y = btn->y(); //获取按钮y坐标
int step = QApplication::keyboardModifiers() & Qt::ControlModifier ? 5:10;
switch (e->key())
{
case Qt::Key_W :
if(y - step >= 10)
{
btn->move(x, y-step);
break;
}
case Qt::Key_S :
if(y + step <= 200)
{
btn->move(x, y+step);
break;
}
case Qt::Key_A :
if(x - step >= 10)
{
btn->move(x-step, y);
break;
}
case Qt::Key_D:
if(x + step <= 200)
{
btn->move(x+step, y);
break;
}
}
}