一、创建一个基类为Widget的桌面应用程序
二、在头文件中定义如下局部变量:
代码语言:javascript复制private:
//棋盘水平方向一个格子的宽度
int gridW;
//棋盘水平方向一个格子的高度
int gridH;
//棋盘起点x坐标
int startX;
//棋盘起点y坐标
int startY;
//棋盘下标
int chessX, chessY;
三、声明如下两个重写的事件
代码语言:javascript复制protected:
//绘图事件
void paintEvent(QPaintEvent *event);
//鼠标移动事件
void mousePressEvent(QMouseEvent *event);
四、头部引入需要用到的头文件
代码语言:javascript复制#include QPainter
代码语言:javascript复制#include QPen
代码语言:javascript复制#include QMouseEvent
代码语言:javascript复制#include QDebug
五、实现重写事件的程序
代码语言:javascript复制void Widget::paintEvent(QPaintEvent *event)
{
//窗口的宽度分10份
gridW = width() / 10;
//窗口的高度分10分
gridH = height() / 10;
//棋盘起点坐标
startX = gridW;
startY = gridH;
//创建画家,指定窗口为绘图设备
QPainter p(this);
//背景图
p.drawPixmap(this->rect(),QPixmap("../Images/bg.jpg"));
//设置画笔
QPen pen;
//线宽
pen.setWidth(4);
//将画笔交给画家
p.setPen(pen);
//取中间8份画棋盘
for(int i = 0; i x();
int y = event->y();
//要保证点击在棋盘范围里面
if(x > startX && x startY && y <= startX gridH*8){
//棋盘的位置转换为坐标的下标值
//类似于a[i][j]是的i和j
chessX = (x-startX)/gridW; //因为变量是Int类型,所以在除法之后会向下取整
//qDebug() << " chessX:" << chessX << " gridW:" << gridW << " x:" << x << " startX:" << startX;
chessY = (y-startY)/gridH;
//更新窗口
update();
}
}
六、最终实现的效果如下 :