使用Qt开发中国象棋(二):棋盘绘制
2015-10-12 16:27
627 查看
棋盘用的是ChessBoard类,主要是显示界面上的棋子,响应鼠标点击事件,激发走棋的信号,MainWindow调用相关的槽,从而完成走棋。下面将一一介绍,错误之处,恳请各位指正,谢谢。棋盘主要是下面的区域:
ChessBoard要显示一张背景图和18个棋子,还有走棋路迹。背景图是一个QPixmap对象,至于棋子,因为界面上有90个位置可以放棋子,所以用了90个QPixmap对象。棋盘的渲染是在paintEvent中实现的,我们用QPainter的drawPixmap函数来显示图片。
显示图片,只要改变arrChessman这个数组中的值,比如说要第九个显示马,我们只需要对应的QPixmap对象load马的图片,但是要记得update一下。不然paintEvent中还是显示原来的图片,相当于没变。像下面这样:
响应鼠标事件需要在mousePressEvent中实现的。我们捕获鼠标左键点击事件,然后激发信号,MainWindow中就会调用相应的槽,去完成走棋的逻辑,当然后面会介绍这些。
棋盘都画出来,对于我们来说总算是开了个头,完成这个东西是迟早的事。没有想象中的那么难吧。是不是很简单?
ChessBoard要显示一张背景图和18个棋子,还有走棋路迹。背景图是一个QPixmap对象,至于棋子,因为界面上有90个位置可以放棋子,所以用了90个QPixmap对象。棋盘的渲染是在paintEvent中实现的,我们用QPainter的drawPixmap函数来显示图片。
void ChessBoard::paintEvent(QPaintEvent *event) { Q_UNUSED(event); int xx = 0; int yy = 0; int index = 0; QPainter painter(this); painter.drawPixmap(0, 0, background); for (int row = 0; row < CHESSBOARD_ROW; ++row) { for (int column = 0; column < CHESSBOARD_COLUMN; ++column) { index = row * CHESSBOARD_COLUMN + column; getPixmapPos(row, column, xx, yy); painter.drawPixmap(xx, yy ,arrChessman[index]); } } }
显示图片,只要改变arrChessman这个数组中的值,比如说要第九个显示马,我们只需要对应的QPixmap对象load马的图片,但是要记得update一下。不然paintEvent中还是显示原来的图片,相当于没变。像下面这样:
chessBoard->update();
响应鼠标事件需要在mousePressEvent中实现的。我们捕获鼠标左键点击事件,然后激发信号,MainWindow中就会调用相应的槽,去完成走棋的逻辑,当然后面会介绍这些。
void ChessBoard::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { int row = 0; int column = 0; getPixmapIndex(event->pos().x(), event->pos().y(), row, column); int sq = getChessmanIndex(row, column, fliped); emit doMove(sq); } }开发这个东西时,曾经遇到过图片不能显示的问题,发现在new一个ChessBoard对象时要指定参数,就像下面那样,必须指定this指针为其参数:
chessHandler = new ChessHandler(this);
棋盘都画出来,对于我们来说总算是开了个头,完成这个东西是迟早的事。没有想象中的那么难吧。是不是很简单?
相关文章推荐
- qt error: C2001: 常量中有换行符
- qt have no compatible devices
- 关于 error: LNK1123: failure during conversion to COFF 错误的解决方案【Qt】【 VS2010】
- 使用Qt开发中国象棋(一):概述
- qt实现界面显示和打印部分分离
- QtConcurrent 名字空间 run函数
- qt通过驱动打开钱箱
- Qt学习一门:直接使用QT具
- 其实参与QtCreator开发也很容易
- qt中vtk易出现错误
- qt中vtk易出现错误
- cmake构建qt工程
- cmake构建qt工程
- VTK6.2&6.3+VS2013+QT5编译配置
- VTK6.2&6.3+VS2013+QT5编译配置
- 升级XCode7后,Qt编译无法找到SDK的问题 推荐
- Qt4.8.4的安装及其在VS2010与Qt Creator下的配置——图文说明
- 解决Qt 运行错误 错误代码 : code -1073741571
- Qt中实现删除文件某一行内容
- PyQt5程序(三)