0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Qt】Qtで■を動かしてみる【C++】

Last updated at Posted at 2025-07-25

Qtで■を動かすプログラムを作成しました。

内容は以下になります。

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QKeyEvent>
#include <QPainter>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

protected:
    void paintEvent(QPaintEvent *event) override;
    void keyPressEvent(QKeyEvent *event) override;
    void keyReleaseEvent(QKeyEvent *event) override;
    void timerEvent(QTimerEvent *event) override;

private:
    int boatX, boatY;
    int boatSpeed;
    bool upPressed, downPressed, leftPressed, rightPressed;
    void moveBoat();
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include <QPainter>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), boatX(200), boatY(200), boatSpeed(5),
      upPressed(false), downPressed(false), leftPressed(false), rightPressed(false)
{
    setFixedSize(800, 600); // ウィンドウサイズを設定
    setWindowTitle("■の操縦");

    // タイマーで定期的に動きの更新
    startTimer(16); // 16msで更新(約60FPS)
}

MainWindow::~MainWindow()
{
}

void MainWindow::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.setBrush(Qt::blue);
    painter.setPen(Qt::black);

    // 矩形で簡単な■を描画![スクリーンショット 2025-07-26 084628.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4000399/00ca6819-d678-4ff9-a22d-cd04d842d1bb.png)

    painter.drawRect(boatX, boatY, 50, 30); // X, Y, 幅, 高さ
}

void MainWindow::keyPressEvent(QKeyEvent *event)
{
    if (event->key() == Qt::Key_Up) {
        upPressed = true;
    } else if (event->key() == Qt::Key_Down) {
        downPressed = true;
    } else if (event->key() == Qt::Key_Left) {
        leftPressed = true;
    } else if (event->key() == Qt::Key_Right) {
        rightPressed = true;
    }
}

void MainWindow::keyReleaseEvent(QKeyEvent *event)
{
    if (event->key() == Qt::Key_Up) {
        upPressed = false;
    } else if (event->key() == Qt::Key_Down) {
        downPressed = false;
    } else if (event->key() == Qt::Key_Left) {
        leftPressed = false;
    } else if (event->key() == Qt::Key_Right) {
        rightPressed = false;
    }
}

void MainWindow::moveBoat()
{
    if (upPressed) {
        boatY -= boatSpeed;
    }
    if (downPressed) {
        boatY += boatSpeed;
    }
    if (leftPressed) {
        boatX -= boatSpeed;
    }
    if (rightPressed) {
        boatX += boatSpeed;
    }

    // 移動範囲を制限
    boatX = qBound(0, boatX, width() - 50);
    boatY = qBound(0, boatY, height() - 30);
}

void MainWindow::timerEvent(QTimerEvent *event)
{
    moveBoat();
    update(); // 画面を更新
}

これで■を上下左右に動かすことが出来ます。

スクリーンショット 2025-07-26 084628.png

↓youtubeリンク
https://youtu.be/HenwaD7r6No

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?