| 229 | } |
| 230 | |
| 231 | void ChessBoard::paintEvent(QPaintEvent *event) |
| 232 | { |
| 233 | QMainWindow::paintEvent(event); |
| 234 | |
| 235 | QPointF boardOrigin; |
| 236 | qreal boardSide = 0.0; |
| 237 | if (!boardTransform(boardOrigin, boardSide)) |
| 238 | return; |
| 239 | |
| 240 | QPainter painter(this); |
| 241 | painter.setRenderHint(QPainter::Antialiasing, true); |
| 242 | |
| 243 | // 填充整个棋盘区域背景(label 范围),深木色作为桌面底色 |
| 244 | const QPoint labelTopLeft = ui->label->mapTo(this, QPoint(0, 0)); |
| 245 | QRectF fullBg(labelTopLeft.x(), labelTopLeft.y(), |
| 246 | ui->label->width(), ui->label->height()); |
| 247 | QLinearGradient outerBg(fullBg.topLeft(), fullBg.bottomRight()); |
| 248 | outerBg.setColorAt(0, QColor(160, 120, 80)); |
| 249 | outerBg.setColorAt(1, QColor(130, 95, 60)); |
| 250 | painter.setPen(Qt::NoPen); |
| 251 | painter.setBrush(outerBg); |
| 252 | painter.drawRect(fullBg); |
| 253 | |
| 254 | painter.save(); |
| 255 | painter.translate(boardOrigin); |
| 256 | const qreal scale = boardSide / 960.0; |
| 257 | painter.scale(scale, scale); |
| 258 | |
| 259 | m_nOffSet = 60.0; //距离界面的边距 |
| 260 | m_nD = 90.0; //间距为50px |
| 261 | m_nR = m_nD/2.0; //棋子半径为d/2 |
| 262 | |
| 263 | //*******************绘画棋盘******************* |
| 264 | // 棋盘背景:木纹色渐变 |
| 265 | QRectF boardRect(m_nOffSet - m_nR, m_nOffSet - m_nR, |
| 266 | 8 * m_nD + 2 * m_nR, 9 * m_nD + 2 * m_nR); |
| 267 | QLinearGradient bgGrad(boardRect.topLeft(), boardRect.bottomRight()); |
| 268 | bgGrad.setColorAt(0, QColor(222, 184, 135)); |
| 269 | bgGrad.setColorAt(1, QColor(205, 170, 125)); |
| 270 | painter.setPen(Qt::NoPen); |
| 271 | painter.setBrush(bgGrad); |
| 272 | painter.drawRoundedRect(boardRect, 6, 6); |
| 273 | |
| 274 | // 棋盘线条:深棕色 |
| 275 | QPen boardPen(QColor(101, 67, 33), 2.0); |
| 276 | painter.setPen(boardPen); |
| 277 | |
| 278 | //绘画10条横线 |
| 279 | for(int i = 0; i <= 9; i++) |
| 280 | painter.drawLine(QPointF(m_nOffSet, m_nOffSet+i*m_nD), QPointF(m_nOffSet+8*m_nD, m_nOffSet+i*m_nD)); |
| 281 | |
| 282 | //绘画9条竖线 |
| 283 | for(int i = 0; i <= 8; i++) |
| 284 | { |
| 285 | if(i==0 || i==8) |
| 286 | { |
| 287 | painter.drawLine(QPointF(m_nOffSet+i*m_nD, m_nOffSet), QPointF(m_nOffSet+i*m_nD, m_nOffSet+9*m_nD)); |
| 288 | } |
nothing calls this directly
no outgoing calls
no test coverage detected