下面是一个简单的例子,使用Qt绘制中国象棋棋盘。
首先,我们需要在Qt的窗口中创建一个QPainter对象,然后通过QPainter对象绘制棋盘。
```cpp
void ChessBoard::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
int squareSize = width() / 10;
// 绘制棋盘
painter.setBrush(QColor("#D18B47"));
painter.drawRect(0, 0, 9 * squareSize, 10 * squareSize);
painter.fillRect(squareSize, squareSize, 8 * squareSize, 8 * squareSize, QColor("#F0D9B5"));
for (int i = 0; i < 9; ++i) {
painter.drawLine((i + 1) * squareSize, squareSize, (i + 1) * squareSize, 9 * squareSize);
}
painter.drawLine(squareSize, squareSize, 9 * squareSize, squareSize);
painter.drawLine(squareSize, 9 * squareSize, 9 * squareSize, 9 * squareSize);
// 绘制棋盘上的点
painter.setBrush(Qt::black);
painter.drawEllipse(QPoint(4 * squareSize, 3 * squareSize), 5, 5);
painter.drawEllipse(QPoint(6 * squareSize, 3 * squareSize), 5, 5);
painter.drawEllipse(QPoint(4 * squareSize, 6 * squareSize), 5, 5);
painter.drawEllipse(QPoint(6 * squareSize, 6 * squareSize), 5, 5);
}
```
在上面的代码中,我们使用QPainter对象的drawRect()和fillRect()方法绘制了棋盘的外框和内部,使用drawLine()方法绘制了棋盘上的线条,使用drawEllipse()方法绘制了棋盘上的点。
在这个例子中,我们将棋盘的大小设置为窗口宽度的10分之9,并将棋盘上每个格子的大小设置为窗口宽度的10分之1。
```cpp
int squareSize = width() / 10;
```
最后,我们需要在QWidget的构造函数中启用绘图功能:
```cpp
ChessBoard::ChessBoard(QWidget *parent)
: QWidget(parent)
{
setFixedSize(9 * squareSize, 10 * squareSize);
}
```
完整的代码可以参考以下代码:
```cpp
#include <QtWidgets>
class ChessBoard : public QWidget
{
public:
ChessBoard(QWidget *parent = 0)
: QWidget(parent)
{
setFixedSize(9 * squareSize, 10 * squareSize);
}
protected:
void paintEvent(QPaintEvent *event) override
{
QPainter painter(this);
int squareSize = width() / 10;
// 绘制棋盘
painter.setBrush(QColor("#D18B47"));
painter.drawRect(0, 0, 9 * squareSize, 10 * squareSize);
painter.fillRect(squareSize, squareSize, 8 * squareSize, 8 * squareSize, QColor("#F0D9B5"));
for (int i = 0; i < 9; ++i) {
painter.drawLine((i + 1) * squareSize, squareSize, (i + 1) * squareSize, 9 * squareSize);
}
painter.drawLine(squareSize, squareSize, 9 * squareSize, squareSize);
painter.drawLine(squareSize, 9 * squareSize, 9 * squareSize, 9 * squareSize);
// 绘制棋盘上的点
painter.setBrush(Qt::black);
painter.drawEllipse(QPoint(4 * squareSize, 3 * squareSize), 5, 5);
painter.drawEllipse(QPoint(6 * squareSize, 3 * squareSize), 5, 5);
painter.drawEllipse(QPoint(4 * squareSize, 6 * squareSize), 5, 5);
painter.drawEllipse(QPoint(6 * squareSize, 6 * squareSize), 5, 5);
}
private:
int squareSize = width() / 10;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
ChessBoard board;
board.show();
return app.exec();
}
```