一、创建一个基类为Widget的桌面应用程序
二、在头文件中定义如下局部变量:
private: //棋盘水平方向一个格子的宽度 int gridW; //棋盘水平方向一个格子的高度 int gridH; //棋盘起点x坐标 int startX; //棋盘起点y坐标 int startY; //棋盘下标 int chessX, chessY;
三、声明如下两个重写的事件
protected: //绘图事件 void paintEvent(QPaintEvent *event); //鼠标移动事件 void mousePressEvent(QMouseEvent *event);
四、头部引入需要用到的头文件
#include QPainter
#include QPen
#include QMouseEvent
#include QDebug
五、实现重写事件的程序
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(); } }
六、最终实现的效果如下 :
版权声明:
此文为本站源创文章[或由本站编辑从网络整理改编],
转载请备注出处:
[狂码一生]
https://www.sindsun.com/articles/16/83
[若此文确切存在侵权,请联系本站管理员进行删除!]
--THE END--