QT棋盘练习

效果图:
在这里插入图片描述
头文件:

#ifndef CHECKWIDGET_H
#define CHECKWIDGET_H

#include <QWidget>
#include<QPoint>
class checkWidget : public QWidget
{
    
    
    Q_OBJECT

public:
    int widthC;
    int heightC;
    int stratX;
    int stratY;
    int checkX;
    int checkY;
    QPoint point;
    checkWidget(QWidget *parent = 0);
    ~checkWidget();
protected:
    void paintEvent(QPaintEvent *);
    void mousePressEvent(QMouseEvent *e);
    void mouseMoveEvent(QMouseEvent *e);

};

#endif // CHECKWIDGET_H

.cpp

#include "checkwidget.h"
#include<QPainter>
#include<QPaintEvent>
#include<QMouseEvent>
#include<QPen>
#include<QMessageBox>
checkWidget::checkWidget(QWidget *parent)
    : QWidget(parent)
{
    
    
    setWindowFlags(Qt::FramelessWindowHint | windowFlags());//去边框  与去背景需要同时使用
    setAttribute(Qt::WA_TranslucentBackground);//去背景
    checkX=-1;//设置棋子坐标默认值
    checkY=-1;
}
void checkWidget::paintEvent(QPaintEvent *)
{
    
    
    //棋盘宽度为8*8
    widthC=width()/10;//将窗口分为10份,即是每个空格的宽度
    heightC=height()/10;//空格的长度
    stratX=widthC;//确定起始坐标
    stratY=heightC;//确定起始坐标
    QPainter p(this);
    p.drawPixmap(rect(),QPixmap(":/image/bk.jpg"));//画背景图
    QPen pen;
    pen.setWidth(4);//设置线宽
    pen.setColor("black");
    p.setPen(pen);
    for(int i=0;i<=8;i++)
    {
    
    
        p.drawLine(stratX,stratY+heightC*i,stratX+8*widthC,stratY+heightC*i);//画横线
        p.drawLine(stratX+widthC*i,stratY,stratX+i*widthC,stratY+heightC*8);//画竖线
    }
    if(checkX!=-1&&checkY!=-1)
    {
    
    
        p.drawPixmap(stratX+checkX*widthC,stratY+checkY*heightC,widthC,heightC,QPixmap("://image/face.png"));//画棋子
    }
}
void checkWidget::mousePressEvent(QMouseEvent *e)
{
    
    
    if(e->button()==Qt::RightButton)
    {
    
    
        int ret=QMessageBox::question(this,"question","是否关闭游戏?");//右击退出窗口
        if(ret==QMessageBox::Yes)
        {
    
    
            close();
        }
    }
    if(e->button()==Qt::LeftButton)
    {
    
    
        point=e->globalPos()-this->frameGeometry().topLeft();
    }
    int x=e->x();
    int y=e->y();
    if(x>=stratX&&x<=stratX+8*widthC&&y>=stratY&&y<=stratY+8*heightC)
    {
    
    
        checkX=(x-stratX)/widthC;//获取棋子X
        checkY=(y-stratY)/heightC;//获取棋子Y
    }
    update();//更新窗口
}
void checkWidget::mouseMoveEvent(QMouseEvent *e)
{
    
    
    if(e->buttons()==Qt::LeftButton)
    {
    
    
        move(e->globalPos()-point);
    }
}
checkWidget::~checkWidget()
{
    
    

}

猜你喜欢

转载自blog.csdn.net/weixin_47414687/article/details/115299851