码迷,mamicode.com
首页 > 其他好文 > 详细

19-1棋盘练习

时间:2018-06-23 00:07:37      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:代码   .cpp   widget   横线   jpg   start   def   resize   qwidget   

学习了事件、绘图。做个练习,在窗口画出一个棋盘,鼠标点下的格子显示图片

技术分享图片

 

 

源代码:

widget.h

#ifndef WIDGET_H

#define WIDGET_H

 

#include <QWidget>

#include <QPaintEvent>

#include <QMouseEvent>

 

 

namespace Ui {

class Widget;

}

 

class Widget : public QWidget

{

    Q_OBJECT

 

public:

    explicit Widget(QWidget *parent = 0);

    ~Widget();

protected:

    void paintEvent(QPaintEvent *);

    void mousePressEvent(QMouseEvent *);

 

private:

    Ui::Widget *ui;

 

    int gridW;      //棋盘水平方向一个格子的宽度

    int gridH;      //高度

    int startX;     //棋盘起点X坐标

    int startY;     //Y坐标

 

    int chessX,chessY;  //棋盘下标

};

 

#endif // WIDGET_H

 

 

widget.cpp

#include "widget.h"

#include "ui_widget.h"

#include <QPainter>

#include <QPen>

#include <QDebug>

 

Widget::Widget(QWidget *parent) :

    QWidget(parent),

    ui(new Ui::Widget)

{

    ui->setupUi(this);

    this->resize(600,600);

    chessX=-1;

    chessY=-1;

}

 

void Widget::paintEvent(QPaintEvent *)

{

    //窗口均分10份

    gridW=this->width()/10;

    gridH=this->height()/10;

 

    //棋盘起点坐标,即左上角坐标

    startX=gridW;

    startY=gridH;

 

 

    //常见画家,指定窗口为绘图设备

    QPainter p(this);

 

    // 背景图

    //p.drawPixmap(rect(),QPixmap("../1.jpg"));

 

    //画笔

    QPen pen;

    pen.setWidth(4);

    p.setPen(pen);

 

    //画棋盘

    for(int i=0;i<=8;++i)

    {

        //横线

        p.drawLine(startX,startY+i*gridH,startX+8*gridW,startY+i*gridH);

        //竖线

        p.drawLine(startX+i*gridW,startY,startX+i*gridW,startY+8*gridH);

    }

    //画棋子

    if(chessX!=-1&&chessY!=-1)

    {

        p.drawPixmap(startX+chessX*gridW,startY+chessY*gridH,

                     gridW,gridH,

                     QPixmap("../1.jpg"));

    }

 

}

 

void Widget::mousePressEvent(QMouseEvent *e)

{

   //获取点击的坐标

    int x=e->x();

    int y=e->y();

 

    //在棋盘范围你内点击有效

    if(x>=startX&&y>=startY&&x<=startX+8*gridW&&y<=startY+8*gridH)

    {

        //棋盘位置转换成坐标下标值

        //类似a[i][j]的i,j  

        chessX=(x-startX)/gridW;

        chessY=(y-startY)/gridH;

        qDebug()<<chessX<<chessY;

        //更新

        update();

    }

}

 

Widget::~Widget()

{

    delete ui;

}

 

19-1棋盘练习

标签:代码   .cpp   widget   横线   jpg   start   def   resize   qwidget   

原文地址:https://www.cnblogs.com/gd-luojialin/p/9215767.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!