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();
}
发布了125 篇原创文章 · 获赞 6 · 访问量 5197

猜你喜欢

转载自blog.csdn.net/weixin_42067873/article/details/101864183
今日推荐