C++與Qt開發人機象棋(第二部分)
項目目錄
文件名->(包含)類名1->(包含)類名2
ChessBy | ChessBy.pro | |
---|---|---|
Headers | Board.h | |
– | – | – |
Sources | Board.cpp | main.cpp |
上次我們講到 調用了 獲取鼠標點擊的當前區域
以及在屏幕上繪製線段,圓,文本,改變他們的顏色。
這次我們就用上次所用到的來創造棋盤。
現在大家來見識下↓面的棋盤
先來講一下原理 :
整個棋盤 都是由線段組成的,那麼我們已經學瞭如何繪製線段,該如何繪製呢?
當然是painter.drawLine(QPiont(x,y),QPiont(x,y)); 它的庫是#include 《QPionter》
先來說一下 第一個 QPiont 它是線的點,我們畫一條線是由第一個點到二個點,所以第一個QPiont就是第一個點,那麼裏面的X,Y是什麼呢? 看下面的圖
沒錯!! ¡¡Bién Gracias!! 就是這樣!
方位圖正如你所想,那麼 點是從你畫的距離開始算起來,到你畫到結束的點位置。
現在說一下如果 QPiont(4,4)只說這個起點 在哪裏呢?
是的,就在打狗棒界限的上方!
既然大家都已經明白的差不多了,那麼我們就上代碼吧?
這句話要加到你的 ChessBy.pro裏面哦
QT+=widgets gui
接着我們打開 Board.h
#ifndef BOARD_H
#define BOARD_H
#include <QWidget>
class Board : public QWidget
{
Q_OBJECT
public:
Board(QWidget *parent = 0);
virtual void paintEvent (QPaintEvent *); /新建一個 繪畫函數
~Board();
};
#endif // BOARD_H
接着找到 Board.cpp
#include "Board.h"
#include <QPainter> //這個是畫家函數
#include <QWidget> //很熟悉的雞肋(基類)
Board::Board(QWidget *parent)
: QWidget(parent)
{
}
Board::~Board()
{
}
void Board::paintEvent(QPaintEvent *) //直接寫上我們的繪畫函數
{
setWindowTitle("él bien gracia Te"); //設置一個標題(name)
QPainter painter(this);
int d=40; //全局變量 d爲方塊像素大小
//畫10條橫線
for(int i=1;i<=10;++i) //1.2.3.4.5.6.7.8.9.10
{
painter.drawLine(QPoint(d,i*d),QPoint(9*d,i*d));
//第一個qpoint是起點,第二個是終點
}
//畫9條豎線
for(int i=1;i<=9;++i)
{
if(i==1 ||i==9)
painter.drawLine(QPoint(i*d,d),QPoint(i*d,10*d)); //這裏之前已經講過啦
else
{
painter.drawLine(QPoint(i*d,d),QPoint(i*d,5*d)); //這裏是打狗棒界限那裏,只畫第一條
painter.drawLine(QPoint(i*d,6*d),QPoint(i*d,10*d)); //然後在畫出最後一條
//繪製文本
//先設置畫筆顏色
painter.setPen(QColor(0,160,230));
//繪製區域爲當前界面的整個區域
painter.drawText(160,220,QStringLiteral("打狗棒界線"));
painter.drawText(120,220,QStringLiteral("beta"));
}
}
//九宮格
painter.drawLine(QPoint(4*d,1*d),QPoint(6*d,3*d)); //斜着畫 米子圖
painter.drawLine(QPoint(6*d,1*d),QPoint(4*d,3*d)); //斜着畫 米子圖
painter.drawLine(QPoint(4*d,8*d),QPoint(6*d,10*d)); //斜着畫 米子圖
painter.drawLine(QPoint(6*d,8*d),QPoint(4*d,10*d)); //斜着畫 米子圖
}