125 lines
3.3 KiB
C++
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);
|
|
}
|
|
}
|