抽离场景打开逻辑、添加编辑界面的左右拖动功能

This commit is contained in:
2026-07-16 11:04:12 +08:00
parent 570f359339
commit 808a38628e
10 changed files with 330 additions and 27 deletions
+59
View File
@@ -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();