Files
VX5_KRO_GearPump/scene/myview.cpp
T

125 lines
3.3 KiB
C++

#include "myview.h"
#include <QWheelEvent>
#include <QMouseEvent>
#include <QScrollBar>
#include "picscene.h"
#include <QDebug>
MyView::MyView(QWidget *parent) :
QGraphicsView(parent)
{
zoomRatio = 1;
//setDragMode(QGraphicsView::ScrollHandDrag);//手型拖动
//setAlignment(Qt::AlignLeft | Qt::AlignTop);
//setFocusPolicy( Qt::NoFocus );
}
// static float a = 1.615;
static float a = 1.64;
void MyView::ZoomOut(void)
{
if(zoomRatio < 6)
{
zoomRatio++;
// scale(2,2);
scale(a,a);
}
}
void MyView::ZoomIn(void)
{
if(zoomRatio > 2)
{
zoomRatio--;
scale(1/a,1/a);
}
}
//void MyView::wheelEvent(QWheelEvent*event) //滚轮事件
//{
//// if(event->delta() > 0) //如果鼠标滚轮远离使用者,则delta()返回正值
//// scale(0.5,0.5); //视图缩放
//// else scale(2,2);
//}
//void MyView::mousePressEvent(QMouseEvent*event)
//{
//// rotate(90); //视图旋转顺时针90度
//}
void MyView::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
m_isPressing = true;
const QPointF scenePos = mapToScene(event->pos());
const bool hasSelectedItem = scene() && !scene()->selectedItems().isEmpty();
m_pressOnItem = hasSelectedItem || (scene() && scene()->itemAt(scenePos, transform()) != nullptr);
m_lastPanPoint = event->pos();
}
QGraphicsView::mousePressEvent(event);
}
void MyView::mouseMoveEvent(QMouseEvent *event)
{
if (m_isPressing && !m_pressOnItem && !m_isPanning) {
const bool noSelectedItems = scene() && scene()->selectedItems().isEmpty();
if (noSelectedItems) {
QPoint delta = event->pos() - m_lastPanPoint;
if (std::abs(delta.x()) >= MyView::PanStartDistance && std::abs(delta.x()) > std::abs(delta.y())) {
m_isPanning = true;
setCursor(Qt::ClosedHandCursor);
}
}
}
if (m_isPanning) {
int deltaX = event->pos().x() - m_lastPanPoint.x();
if (deltaX != 0) {
horizontalScrollBar()->setValue(horizontalScrollBar()->value() - deltaX);
m_lastPanPoint = event->pos();
}
event->accept();
return;
}
QGraphicsView::mouseMoveEvent(event);
}
void MyView::mouseReleaseEvent(QMouseEvent *event)
{
if (m_isPanning && event->button() == Qt::LeftButton) {
m_isPanning = false;
m_isPressing = false;
setCursor(Qt::ArrowCursor);
event->accept();
return;
}
if (event->button() == Qt::LeftButton) {
m_isPressing = false;
m_pressOnItem = false;
}
QGraphicsView::mouseReleaseEvent(event);
}
void MyView::keyPressEvent(QKeyEvent *event)
{
//event->accept();
//parent()->event((QEvent*) event);
if (event->key() == Qt::Key_Left || event->key() == Qt::Key_Right || event->key() == Qt::Key_Up || event->key() == Qt::Key_Down)
{
// 处理上下键事件
PicScene* picScene = dynamic_cast<PicScene*>(this->scene());
if(picScene)
{
picScene->keyPressEvent(event);
}
}
else
{
// 其他键事件交给父类处理
QGraphicsView::keyPressEvent(event);
}
}