zoukankan      html  css  js  c++  java
  • searchdemo 二.鼠标事件

      鼠标点击,拖拽事件的追加,现在可以手动对方格染色。

      图片:

    main.cpp:

    C++语言: Codee#26073
    01 #include <QtGui>
    02 #include <QtCore>
    03 #include "pathfinding.h"
    04
    05 int main(int argc, char *argv[])
    06 {
    07     QApplication a(argc, argv);
    08     Widget* window=new Widget;
    09
    10     QRect frect = window->frameGeometry();
    11     frect.moveCenter(QDesktopWidget().availableGeometry().center());
    12     window->move(frect.topLeft());
    13     window->show();
    14
    15     return a.exec();
    16 }

    pathfinding.h:

     

    C++语言: Codee#26074
    01 #ifndef PATHFINDING_H
    02 #define PATHFINDING_H
    03
    04 #include <QtGui>
    05 #include <QtCore>
    06 #include <QTime>
    07
    08 class Widget : public QWidget
    09 {
    10     Q_OBJECT
    11
    12 public:
    13     Widget(QWidget* parent = 0);
    14     void paintEvent(QPaintEvent* event);
    15     void mousePressEvent(QMouseEvent* event);
    16     void mouseMoveEvent(QMouseEvent* event);
    17     void setWindowPixel(const QPoint& pos, bool opaque);
    18
    19 private:
    20     enum {LENGTH = 910};
    21     enum {WIDTH = 700};
    22     enum {BLOCKSIZE = 35};
    23     bool blocks[LENGTH/BLOCKSIZE][WIDTH/BLOCKSIZE];
    24     //QTime time;
    25     QPoint cursorpos;
    26 };
    27
    28 #endif // PATHFINDING_H

    pathfinding.cpp:

     

    C++语言: Codee#26075
    01 #include "pathfinding.h"
    02
    03 Widget::Widget(QWidget* parent)
    04     : QWidget(parent)
    05 {
    06     for (int i = 0; i < LENGTH / BLOCKSIZE; ++i)
    07         for (int j = 0; j < WIDTH / BLOCKSIZE; ++j)
    08             blocks[i][j] = true;
    09     setAttribute(Qt::WA_StaticContents);
    10     setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
    11     this->setMouseTracking(true);
    12     this->setFixedSize(LENGTH, WIDTH);
    13 }
    14
    15 void Widget::paintEvent(QPaintEvent* event)
    16 {
    17     QPainter painter(this);
    18
    19
    20     QColor color;
    21     for (int i = 0; i < LENGTH / BLOCKSIZE; ++i)
    22         for (int j = 0; j < WIDTH / BLOCKSIZE; ++j)
    23         {
    24             if (!blocks[i][j])
    25                 color = Qt::gray;
    26             else
    27                 color = Qt::white;
    28             painter.fillRect(QRect(BLOCKSIZE * i, BLOCKSIZE * j,
    29                                    BLOCKSIZE, BLOCKSIZE), color);
    30         }
    31     painter.setPen(QPen(Qt::gray));
    32
    33     for (int i = 0; i < LENGTH; i += BLOCKSIZE)
    34         painter.drawLine(i, 0,
    35                          i, WIDTH);
    36     for (int j = 0; j <= WIDTH; j += BLOCKSIZE)
    37         painter.drawLine(0,  j,
    38                          LENGTH, j);
    39
    40     painter.setFont(QFont("Arial", 50));
    41     painter.drawText(rect(), Qt::AlignCenter, "Hello Qt!");
    42 }
    43
    44 void Widget::mousePressEvent(QMouseEvent* event)
    45 {
    46     cursorpos = QPoint(event->pos().x() / BLOCKSIZE,
    47                        event->pos().y() / BLOCKSIZE);
    48     /*
    49     if (event->buttons() & Qt::LeftButton)
    50     */
    51     setWindowPixel(event->pos(), true);
    52 }
    53
    54 void Widget::mouseMoveEvent(QMouseEvent* event)
    55 {
    56     QTime curTime = QTime::currentTime();
    57     QPoint tmppos = QPoint(event->pos().x() / BLOCKSIZE,
    58                            event->pos().y() / BLOCKSIZE);
    59     if (cursorpos != tmppos &&
    60         event->buttons() & Qt::RightButton)
    61     {
    62         //qDebug("Time elapsed: %d ms", time.msecsTo(curTime));
    63         setWindowPixel(event->pos(), true);
    64     }
    65     //cursorpos=tmppos;
    66 }
    67
    68
    69 void Widget::setWindowPixel(const QPoint& pos, bool opaque)
    70 {
    71     int x = pos.x() / BLOCKSIZE;
    72     int y = pos.y() / BLOCKSIZE;
    73     cursorpos = QPoint(x, y);
    74     blocks[x][y] = !blocks[x][y];
    75     update();
    76 }
  • 相关阅读:
    db.Exec和db.Query的区别
    golang两种get请求获取携带参数的方式
    gin实现中间件middleware
    gin操作session
    笔札-有触动的句子
    并发的基本概念
    售货员的难题
    传球游戏之最小总代价
    状压dp入门
    [COCI 2010] OGRADA
  • 原文地址:https://www.cnblogs.com/invisible/p/2450058.html
Copyright © 2011-2022 走看看