void MainWindow::mousePressEvent(QMouseEvent* event),MainWindow什麽意思
时间: 2024-04-30 09:10:59 浏览: 12
`MainWindow` 是一个类名,它是一个窗口类。在Qt框架中,通常使用Qt Designer设计窗口UI,然后用Qt Creator创建一个继承自特定窗口类的子类,如 `QMainWindow`、`QDialog` 等,然后在子类中实现事件处理函数,如 `mousePressEvent`。这个函数是在鼠标按下事件发生时被调用的。因此,`MainWindow::mousePressEvent` 是 `MainWindow` 类的一个成员函数,用于处理鼠标按下事件。
相关问题
void MainWindow::mousePressEvent(QMouseEvent* event)//鼠標設置障礙物起始,終點 { if(event->button()==Qt::LeftButton&&mode==0)//障礙物 { int j=(event->y()-50)/25-1,i=(event->x()-200)/25; _MAP[i][j]=!_MAP[i][j]; update(); },將鼠標點擊變爲框選完整代碼
完整代码如下:
```cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMouseEvent>
#include <QPainter>
const int MAP_WIDTH = 20;
const int MAP_HEIGHT = 20;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
setFixedSize(600, 600);
setWindowTitle("A* Path Finding");
mode = 0;
isSelecting = false;
memset(_MAP, 0, sizeof(_MAP));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::mousePressEvent(QMouseEvent* event)
{
if (event->button() == Qt::LeftButton && mode == 0)
{
int j = (event->y() - 50) / 25 - 1;
int i = (event->x() - 200) / 25;
// 判断鼠标是否在地图区域内
if (i >= 0 && i < MAP_WIDTH && j >= 0 && j < MAP_HEIGHT)
{
// 记录下鼠标的起点,并将 isSelecting 标记为 true
startPoint = endPoint = QPoint(i, j);
isSelecting = true;
update();
}
}
}
void MainWindow::mouseMoveEvent(QMouseEvent* event)
{
if (isSelecting)
{
int j = (event->y() - 50) / 25 - 1;
int i = (event->x() - 200) / 25;
// 判断鼠标是否在地图区域内
if (i >= 0 && i < MAP_WIDTH && j >= 0 && j < MAP_HEIGHT)
{
// 记录下鼠标的终点,并调用 update 函数进行界面更新
endPoint = QPoint(i, j);
update();
}
}
}
void MainWindow::mouseReleaseEvent(QMouseEvent* event)
{
if (event->button() == Qt::LeftButton && mode == 0 && isSelecting)
{
// 标记为框选结束
isSelecting = false;
// 获取框选的矩形
int left = qMin(startPoint.x(), endPoint.x());
int top = qMin(startPoint.y(), endPoint.y());
int right = qMax(startPoint.x(), endPoint.x());
int bottom = qMax(startPoint.y(), endPoint.y());
// 将框选的矩形内的格子设置为障碍物
for (int i = left; i <= right; i++)
{
for (int j = top; j <= bottom; j++)
{
if (i >= 0 && i < MAP_WIDTH && j >= 0 && j < MAP_HEIGHT)
{
_MAP[i][j] = true;
}
}
}
update();
}
}
void MainWindow::paintEvent(QPaintEvent* event)
{
QPainter painter(this);
// 绘制地图
painter.setPen(Qt::black);
painter.setBrush(Qt::white);
for (int i = 0; i < MAP_WIDTH; i++)
{
for (int j = 0; j < MAP_HEIGHT; j++)
{
if (_MAP[i][j])
{
painter.fillRect(QRect(i * 25 + 200, j * 25 + 50, 25, 25), Qt::black);
}
else
{
painter.drawRect(QRect(i * 25 + 200, j * 25 + 50, 25, 25));
}
}
}
// 绘制框选的矩形
if (isSelecting)
{
painter.setPen(Qt::red);
painter.setBrush(Qt::NoBrush);
painter.drawRect(QRect(startPoint, endPoint));
}
}
```
这个代码实现了在地图上鼠标框选多个格子,并将其设置为障碍物的功能。你可以在窗口中按下鼠标左键并拖动鼠标来进行框选。
#include "mainwindow.h"#include <QPainter>#include <QDebug>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , m_isDrawing(false){ setFixedSize(800, 600); // 设置窗口大小 m_image = QImage(800, 600, QImage::Format_RGB32); // 创建一张大小为800*600的图像 m_image.fill(Qt::white); // 用白色填充图像}MainWindow::~MainWindow(){}void MainWindow::paintEvent(QPaintEvent *event){ QPainter painter(this); painter.drawImage(rect(), m_image, m_image.rect()); painter.setPen(QPen(Qt::red, 2, Qt::SolidLine, Qt::RoundCap)); // 设置画笔颜色、宽度和样式 foreach (const QLine &line, m_lines) { painter.drawLine(line); } // 绘制当前正在绘制的线 if (m_isDrawing) { painter.drawLine(m_startPoint, m_endPoint); }}void MainWindow::mousePressEvent(QMouseEvent *event){ if (event->button() == Qt::LeftButton) { if (!m_isDrawing) { m_startPoint = event->pos(); m_endPoint = event->pos(); m_isDrawing = true; } else { m_endPoint = event->pos(); m_isDrawing = false; m_lines.append(QLine(m_startPoint, m_endPoint)); update(); // 刷新窗口 } }}
这是一个基于Qt框架的简单画图程序的主窗口类实现。在构造函数中设置窗口大小并创建一张800*600大小的图像,用白色填充。在绘图事件中,首先绘制整张图像,然后用红色画笔绘制所有已经画好的线条。如果正在绘制新的线条,则绘制当前线条。在鼠标按下事件中,如果是左键按下且当前没有正在绘制的线条,则记录起始点和结束点,并设置正在绘制标志为true;如果已经有正在绘制的线条,则记录结束点,将该线条加入线条列表,并刷新窗口。