16,816
社区成员




if(event->key() == Qt::Key_A)
movePlane();
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
const int REPEAT_RATE = 300;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
repeatTimer(new QTimer(this))
{
ui->setupUi(this);
connect(repeatTimer, SIGNAL(timeout()), SLOT(onRepeatTimer()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::keyPressEvent(QKeyEvent *event)
{
pressedKeys.append(static_cast<Qt::Key>(event->key()));
if(!repeatTimer->isActive()) {
repeatTimer->start(REPEAT_RATE); // 重复间隔 REPEAT_RATE = 300 毫秒
}
}
void MainWindow::keyReleaseEvent(QKeyEvent *event)
{
if(repeatTimer->isActive() && pressedKeys.isEmpty()) {
repeatTimer->stop();
onRepeatTimer();
}
pressedKeys.removeAll(static_cast<Qt::Key>(event->key()));
}
void MainWindow::onRepeatTimer()
{
if(pressedKeys.contains(Qt::Key_W)) {
qDebug() << tr("向上移动");
}
if(pressedKeys.contains(Qt::Key_S)) {
qDebug() << tr("向下移动");
}
if(pressedKeys.contains(Qt::Key_A)) {
qDebug() << tr("向左移动");
}
if(pressedKeys.contains(Qt::Key_D)) {
qDebug() << tr("向右移动");
}
if(pressedKeys.contains(Qt::Key_H)) {
qDebug() << tr("发射子弹");
}
}