头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPainter>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void paintEvent(QPaintEvent *e)override;
private:
Ui::Widget *ui;
int m_cellLength{90};
int m_W{840};
int m_H{920};
QPoint m_topLeft{60,55};
};
#endif
源文件
#include "widget.h"
#include "ui_widget.h"
#include <QPainterPath>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->setMinimumHeight(m_H);
this->setMaximumHeight(m_H);
this->setMinimumWidth(m_W);
this->setMaximumWidth(m_W);
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent *event){
Q_UNUSED(event);
QPainter painter(this);
painter.setRenderHint(QPainter::LosslessImageRendering);
QPen pen;
pen.setWidth(4);
pen.setColor(Qt::black);
pen.setStyle(Qt::SolidLine);
pen.setCapStyle(Qt::FlatCap);
pen.setJoinStyle(Qt::BevelJoin);
painter.setPen(pen);
QBrush boardBrush;
boardBrush.setStyle(Qt::NoBrush);
painter.setBrush(boardBrush);
QRect boardRect(m_topLeft.x(),m_topLeft.y(),m_cellLength*8,m_cellLength*9);
painter.drawRect(boardRect);
for(int i=1;i<9;i++){
QLine line(m_topLeft.x(),m_topLeft.y()+i*m_cellLength,m_topLeft.x()+m_cellLength*8,m_topLeft.y()+i*m_cellLength);
painter.drawLine(line);
}
for(int i=1;i<8;i++){
QLine line(m_topLeft.x()+i*m_cellLength,m_topLeft.y(),m_topLeft.x()+i*m_cellLength,m_topLeft.y()+4*m_cellLength);
painter.drawLine(line);
}
for(int i=1;i<8;i++){
QLine line(m_topLeft.x()+i*m_cellLength,m_topLeft.y()+5*m_cellLength,m_topLeft.x()+i*m_cellLength,m_topLeft.y()+9*m_cellLength);
painter.drawLine(line);
}
QLine line(m_topLeft.x()+3*m_cellLength,m_topLeft.y(),m_topLeft.x()+5*m_cellLength,m_topLeft.y()+2*m_cellLength);
painter.drawLine(line);
line.setLine(m_topLeft.x()+3*m_cellLength,m_topLeft.y()+7*m_cellLength,m_topLeft.x()+5*m_cellLength,m_topLeft.y()+9*m_cellLength);
painter.drawLine(line);
line.setLine(m_topLeft.x()+3*m_cellLength,m_topLeft.y()+2*m_cellLength,m_topLeft.x()+5*m_cellLength,m_topLeft.y());
painter.drawLine(line);
line.setLine(m_topLeft.x()+3*m_cellLength,m_topLeft.y()+9*m_cellLength,m_topLeft.x()+5*m_cellLength,m_topLeft.y()+7*m_cellLength);
painter.drawLine(line);
QFont font;
font.setPointSize(50);
painter.setFont(font);
painter.drawText(QRect(m_topLeft.x(),m_topLeft.y()+4*m_cellLength,m_topLeft.x()+8*m_cellLength,m_cellLength),
tr("\t\t\t\t\t\t\t楚\t河\t\t\t\t\t\t\t汉\t界"));
int angleLength=15;
int angleSpace=5;
QPoint points[]{QPoint(m_topLeft.x()+angleLength,m_topLeft.y()),
QPoint(m_topLeft.x(),m_topLeft.y()),
QPoint(m_topLeft.x(),m_topLeft.y()+angleLength)};
QPainterPath anglePath;
anglePath.moveTo(points[0]);
anglePath.lineTo(points[1]);
anglePath.lineTo(points[2]);
painter.translate(angleSpace,3*m_cellLength+angleSpace);
painter.save();
for(int i=0;i<4;i++){
painter.drawPath(anglePath);
painter.translate(0,3*m_cellLength);
painter.drawPath(anglePath);
painter.translate(0,-3*m_cellLength);
painter.translate(2*m_cellLength,0);
}
painter.restore();
painter.translate(angleSpace,m_cellLength+angleLength);
for(int i=0;i<4;i++){
painter.rotate(-90);
painter.drawPath(anglePath);
painter.rotate(90);
painter.translate(0,3*m_cellLength);
painter.rotate(-90);
painter.drawPath(anglePath);
painter.rotate(90);
painter.translate(0,-3*m_cellLength);
painter.translate(2*m_cellLength,0);
}
painter.translate(-5*m_cellLength+3*angleSpace,-angleLength+2*angleSpace);
for(int i=0;i<4;i++){
painter.rotate(-180);
painter.drawPath(anglePath);
painter.rotate(180);
painter.translate(0,3*m_cellLength);
painter.rotate(-180);
painter.drawPath(anglePath);
painter.rotate(180);
painter.translate(0,-3*m_cellLength);
painter.translate(2*m_cellLength,0);
}
painter.translate(-8*m_cellLength-angleLength+2*angleSpace,-m_cellLength-3*angleSpace);
for(int i=0;i<4;i++){
painter.rotate(90);
painter.drawPath(anglePath);
painter.rotate(-90);
painter.translate(0,3*m_cellLength);
painter.rotate(90);
painter.drawPath(anglePath);
painter.rotate(-90);
painter.translate(0,-3*m_cellLength);
painter.translate(2*m_cellLength,0);
}
painter.translate(-10*m_cellLength-angleLength,-m_cellLength+angleSpace);
painter.save();
for(int i=0;i<2;i++){
painter.drawPath(anglePath);
painter.translate(0,5*m_cellLength);
painter.drawPath(anglePath);
painter.translate(0,-5*m_cellLength);
painter.translate(6*m_cellLength,0);
}
painter.restore();
painter.translate(angleSpace,m_cellLength+angleLength);
for(int i=0;i<2;i++){
painter.rotate(-90);
painter.drawPath(anglePath);
painter.rotate(90);
painter.translate(0,5*m_cellLength);
painter.rotate(-90);
painter.drawPath(anglePath);
painter.rotate(90);
painter.translate(0,-5*m_cellLength);
painter.translate(6*m_cellLength,0);
}
painter.translate(-11*m_cellLength+3*angleSpace,-angleLength+2*angleSpace);
for(int i=0;i<2;i++){
painter.rotate(-180);
painter.drawPath(anglePath);
painter.rotate(180);
painter.translate(0,5*m_cellLength);
painter.rotate(-180);
painter.drawPath(anglePath);
painter.rotate(180);
painter.translate(0,-5*m_cellLength);
painter.translate(6*m_cellLength,0);
}
painter.translate(-12*m_cellLength-angleLength+2*angleSpace,-m_cellLength-3*angleSpace);
for(int i=0;i<2;i++){
painter.rotate(90);
painter.drawPath(anglePath);
painter.rotate(-90);
painter.translate(0,5*m_cellLength);
painter.rotate(90);
painter.drawPath(anglePath);
painter.rotate(-90);
painter.translate(0,-5*m_cellLength);
painter.translate(6*m_cellLength,0);
}
}
效果图
