#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QGraphicsView>
#include <QKeyEvent>
#include <QPoint>
{
Q_OBJECT
public:
NodeGraphWidget
(QWidget *parent
= 0);
public slots:
//void zoomIn();
//void zoomOut();
protected:
float mScale;
int mOffsetX;
int mOffsetY;
bool mMiddleMouseDown;
QPoint mOldMousePos, mNewMousePos;
private:
};
#endif // MAINWINDOW_H
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QGraphicsView>
#include <QKeyEvent>
#include <QPoint>
class NodeGraphWidget : public QGraphicsView
{
Q_OBJECT
public:
NodeGraphWidget(QWidget *parent = 0);
public slots:
//void zoomIn();
//void zoomOut();
protected:
void keyPressEvent(QKeyEvent *event);
void drawBackground(QPainter *painter, const QRectF &rect);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
float mScale;
int mOffsetX;
int mOffsetY;
bool mMiddleMouseDown;
QPoint mOldMousePos, mNewMousePos;
private:
};
#endif // MAINWINDOW_H
To copy to clipboard, switch view to plain text mode
#include "NodeGraphWidget.h"
#include <QBrush>
#include <QDebug>
#include <QEvent>
#include <QGraphicsScene>
#include <QKeyEvent>
NodeGraphWidget
::NodeGraphWidget(QWidget *parent
){
scene->setSceneRect(0, 0, 400, 400);
setScene(scene);
setViewportUpdateMode(BoundingRectViewportUpdate);
setCacheMode(CacheBackground);
setTransformationAnchor(AnchorUnderMouse);
//this->ch
scale(qreal(1.0), qreal(1.0));
//setMinimumSize(400, 400);
setWindowTitle(tr("Test"));
mOffsetX = 0;
mOffsetY = 0;
mScale = 1.f;
}
void NodeGraphWidget
::keyPressEvent(QKeyEvent *event
) {
Q_UNUSED(event);
qDebug() << event->key();
switch(event->key())
{
default: setWindowTitle("FUCK");
}
}
void NodeGraphWidget
::drawBackground(QPainter *painter,
const QRectF &rect
) {
Q_UNUSED(rect);
qDebug() << "redraw bkg, " << mOffsetX << " " << mOffsetY;
QRectF sceneRect
= this
->sceneRect
();
painter->fillRect(sceneRect, Qt::SolidPattern);
painter
->setPen
(QColor(80,
80,
80));
const int gridSize = 150;
for(int y = -3; y < (int)(height()*mScale)%gridSize; y++)
{
for(int x = -3; x < (int)(width()*mScale)%gridSize; x++)
{
painter->drawRect((x*gridSize)-(mOffsetX), (y*gridSize)-(mOffsetY), gridSize, gridSize);
}
}
}
void NodeGraphWidget
::mousePressEvent(QMouseEvent *event
) {
switch(event->button())
{
case Qt::MiddleButton:
qDebug() << "DOWN";
mMiddleMouseDown = true;
mOldMousePos = event->localPos().toPoint();
break;
}
}
void NodeGraphWidget
::mouseMoveEvent(QMouseEvent *event
) {
if(mMiddleMouseDown == true)
{
qDebug() << "DRAG";
mNewMousePos = event->localPos().toPoint();
mOffsetX = 75;// mOldMousePos.x() - mNewMousePos.x();
mOffsetY = 75;// mOldMousePos.y() - mNewMousePos.y();
invalidateScene();
}
}
void NodeGraphWidget
::mouseReleaseEvent(QMouseEvent *event
) {
switch(event->button())
{
case Qt::MiddleButton:
qDebug() << "UP";
mMiddleMouseDown = false;
//mOldMousePos = QPoint(0, 0);
//mNewMousePos = QPoint(0, 0);
mOffsetX = 0;
mOffsetY = 0;
break;
}
}
#include "NodeGraphWidget.h"
#include <QBrush>
#include <QDebug>
#include <QEvent>
#include <QGraphicsScene>
#include <QKeyEvent>
NodeGraphWidget::NodeGraphWidget(QWidget *parent)
: QGraphicsView(parent)
{
QGraphicsScene *scene = new QGraphicsScene(this);
scene->setItemIndexMethod(QGraphicsScene::NoIndex);
scene->setSceneRect(0, 0, 400, 400);
setScene(scene);
setViewportUpdateMode(BoundingRectViewportUpdate);
setCacheMode(CacheBackground);
setRenderHint(QPainter::Antialiasing);
setTransformationAnchor(AnchorUnderMouse);
//this->ch
scale(qreal(1.0), qreal(1.0));
//setMinimumSize(400, 400);
setWindowTitle(tr("Test"));
mOffsetX = 0;
mOffsetY = 0;
mScale = 1.f;
}
void NodeGraphWidget::keyPressEvent(QKeyEvent *event)
{
Q_UNUSED(event);
qDebug() << event->key();
switch(event->key())
{
default: setWindowTitle("FUCK");
}
}
void NodeGraphWidget::drawBackground(QPainter *painter, const QRectF &rect)
{
Q_UNUSED(rect);
qDebug() << "redraw bkg, " << mOffsetX << " " << mOffsetY;
QRectF sceneRect = this->sceneRect();
painter->setBrush(QBrush(QColor(64,64,64)));
painter->fillRect(sceneRect, Qt::SolidPattern);
painter->setPen(QColor(80, 80, 80));
const int gridSize = 150;
for(int y = -3; y < (int)(height()*mScale)%gridSize; y++)
{
for(int x = -3; x < (int)(width()*mScale)%gridSize; x++)
{
painter->drawRect((x*gridSize)-(mOffsetX), (y*gridSize)-(mOffsetY), gridSize, gridSize);
}
}
}
void NodeGraphWidget::mousePressEvent(QMouseEvent *event)
{
switch(event->button())
{
case Qt::MiddleButton:
qDebug() << "DOWN";
mMiddleMouseDown = true;
mOldMousePos = event->localPos().toPoint();
break;
}
}
void NodeGraphWidget::mouseMoveEvent(QMouseEvent *event)
{
if(mMiddleMouseDown == true)
{
qDebug() << "DRAG";
mNewMousePos = event->localPos().toPoint();
mOffsetX = 75;// mOldMousePos.x() - mNewMousePos.x();
mOffsetY = 75;// mOldMousePos.y() - mNewMousePos.y();
invalidateScene();
}
}
void NodeGraphWidget::mouseReleaseEvent(QMouseEvent *event)
{
switch(event->button())
{
case Qt::MiddleButton:
qDebug() << "UP";
mMiddleMouseDown = false;
//mOldMousePos = QPoint(0, 0);
//mNewMousePos = QPoint(0, 0);
mOffsetX = 0;
mOffsetY = 0;
break;
}
}
To copy to clipboard, switch view to plain text mode
Bookmarks