抽离场景打开逻辑、添加编辑界面的左右拖动功能
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
#include "myview.h"
|
||||
#include <QWheelEvent>
|
||||
#include <QMouseEvent>
|
||||
#include <QScrollBar>
|
||||
#include "picscene.h"
|
||||
#include <QDebug>
|
||||
MyView::MyView(QWidget *parent) :
|
||||
@@ -44,6 +46,63 @@ void MyView::ZoomIn(void)
|
||||
//// 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();
|
||||
|
||||
Reference in New Issue
Block a user