Qt实现五子棋准备

一、第一步要进行的就是简单界面的设计,这里需要用到Qt中绘图类的使用,在做五子棋时的要求

1、设计时,widget的尺寸定为600 x 600,在Qt类中的实现

void MyGoBang::paintEvent(QPaintEvent *)
{
    QPainter p(this);
    p.setPen(QColor("#8D5822"));
    p.setBrush(QColor("#EEC085"));
    p.drawRect(rect());

    gridW = gridH = 560 / 14; //窗口高和宽度分14份,左右各分一个20做边框
    //棋盘起点坐标
    startX = 20;
    startY = 20;

    //设置画笔
    QPen pen;
    pen.setWidth(1); //线宽
    p.setPen(pen);  //将画笔交给画家

    //取中间14份画棋盘,画15条线
    for(int i = 0; i <= 14; i++)
    {
        //横线
        p.drawLine(startX, startY+i*gridH, startX+14*gridW, startY+i*gridH);

        //竖线
        p.drawLine(startX+i*gridW, startY, startX+i*gridW, startY+14*gridH);
    }

    //绘制标识点,棋盘中有5个位置标识点
    p.setPen(Qt::NoPen);
    p.setBrush(Qt::black);
    p.drawRect(135, 135, 10, 10);
    p.drawRect(135, 455, 10, 10);
    p.drawRect(455, 135, 10, 10);
    p.drawRect(295, 295, 10, 10);
    p.drawRect(455, 455, 10, 10);

    //绘制鼠标位置当前位置,用红色方框框住
    p.setPen(Qt::red);
    p.setBrush(Qt::NoBrush);
    //开始留了20的边框,所以在画范围框时,不需要在减去20
    p.drawRect(mouseX * 40, mouseY *40, 40, 40);
}

2、需要注意的是,在本次五子棋设计中,分逻辑坐标和实际坐标,逻辑坐标对应棋盘上的点的位置,实际坐标对应实际距离边框的举例

//实际坐标转移到逻辑坐标
void MyGoBang::mousePressEvent(QMouseEvent *ev)
{
    //qDebug() << ev->pos();
    mouseX = ev->pos().x() / 40;
    mouseY = ev->pos().y() / 40;
}

3、设置鼠标自动跟踪

法1:ui设置中,选中mouseTracking

void MyGoBang::mouseMoveEvent(QMouseEvent *ev)
{
    //qDebug() << ev->pos();
    mouseX = ev->pos().x() / 40;
    mouseY = ev->pos().y() / 40;

    repaint(); //鼠标移动后,重绘制范围
}

法2:代码实现,设置当前父类追踪鼠标属性mouseTracking为true

注:实现mouseMoveEvent,若是setMouseTrack(true),直接可以得到监听事件。若是setMouseTrack(false),只有鼠标按下才会有mouseMove监听事件响应。

this->setMouseTracking(true);

二、设置鼠标按压和鼠标移动事件

//实际坐标转移到逻辑坐标
void MyGoBang::mousePressEvent(QMouseEvent *ev)
{
    //qDebug() << ev->pos();
    mouseX = ev->pos().x() / 40;
    mouseY = ev->pos().y() / 40;
}

void MyGoBang::mouseMoveEvent(QMouseEvent *ev)
{
    qDebug() << ev->pos();
    mouseX = ev->pos().x() / 40;
    mouseY = ev->pos().y() / 40;

    repaint();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Star星屹程序设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值