Qt绘画围棋棋盘(完整版)

#pragma once

#include <QtWidgets/QWidget>
#include "ui_QtChess.h"

class QtChess : public QWidget
{
	Q_OBJECT

public:
	QtChess(QWidget *parent = Q_NULLPTR);

protected:
	void paintEvent(QPaintEvent *event);
	void mousePressEvent(QMouseEvent *event);

private:
	Ui::QtChessClass ui;

	int gridW;		//格子的宽度
	int gridH;		//格子的高度
	int startX;		//起始横坐标
	int startY;		//起始纵坐标

	int chessX, chessY;	//棋盘下标
};
#include "QtChess.h"
#include <QPainter>
#include <QPen>
#include <QMouseEvent>

QtChess::QtChess(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);

	chessX = -1;
	chessY = -1;
}
void QtChess::paintEvent(QPaintEvent *event)
{
	gridW = width() / 10;		//窗口宽度分10份
	gridH = height() / 10;		//窗口高低分10份
	
	startX = gridW;
	startY = gridH;

	QPainter p(this);
	p.drawPixmap(rect(), QPixmap("../Image/girl.jpg"));		//设置背景图
			
	QPen pen;
	pen.setWidth(4);		//设置线宽
	p.setPen(pen);

	for (int i = 0; i < 9; ++i)
	{
		p.drawLine(startX, startY + i * gridH, gridW * 8 + startX, startY + i * gridH);		//画横线
		p.drawLine(startX + gridW * i, startY, startX + i * gridW, startY + gridH * 8);
	}

	//画棋子
	if (chessX != -1 && chessY != -1)
	{
		p.drawPixmap(startX + chessX*gridW, startY + chessY * gridH, gridW, gridH, QPixmap("../Image/2.jpg"));
	}
}
void QtChess::mousePressEvent(QMouseEvent *event)
{
	//获取点击的坐标
	int x = event->x();
	int y = event->y();

	//要保证点击在棋盘里
	if (x >= startX && x <= startX + 8 * gridW
		&& y >= startY && y <= startY + 8 * gridH)
	{
		//棋盘的位置转换成坐标下标值
		chessX = (x - startX) / gridW;
		chessY = (y - startY) / gridH;

		//更新窗口,间接调用 paintEvent() 函数
		update();
	}
}

你可能感兴趣的:(Qt基础)