效果图:
头文件:
#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()
{
}