@ -14,8 +14,17 @@
ImageViewer : : ImageViewer ( QWidget * pParent ) : QGraphicsView ( pParent )
{
setRenderHint ( QPainter : : Antialiasing ) ;
setRenderHint ( QPainter : : SmoothPixmapTransform ) ;
setDragMode ( QGraphicsView : : ScrollHandDrag ) ;
// <20> ؼ<EFBFBD> <D8BC> 㣺<EFBFBD> <E3A3BA> ʹ <EFBFBD> <CAB9> Qt Ĭ<> ϵ<EFBFBD> anchor<6F> <72> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Լ<EFBFBD> <D4BC> <EFBFBD> <EFBFBD> <EFBFBD>
setTransformationAnchor ( QGraphicsView : : NoAnchor ) ;
setResizeAnchor ( QGraphicsView : : NoAnchor ) ;
m_qtGraphicsScene = new QGraphicsScene ( this ) ;
this - > setScene ( m_qtGraphicsScene ) ;
m_qtGraphicsScene - > setSceneRect ( - 1e6 , - 1e6 , 2e6 , 2e6 ) ;
m_framNumberLabel = new QLabel ( this ) ;
m_framNumberLabel - > setAlignment ( Qt : : AlignHCenter ) ;
@ -61,9 +70,24 @@ void ImageViewer::SetImage(QPixmap *image)
{
m_GraphicsPixmapItemHandle - > setPixmap ( * image ) ;
}
ensureSceneVisible ( ) ;
}
setSceneRect ( QRectF ( image - > rect ( ) ) ) ;
void ImageViewer : : ensureSceneVisible ( )
{
resetTransform ( ) ;
auto view_rect = viewport ( ) - > rect ( ) ;
auto scene_rect = this - > scene ( ) - > itemsBoundingRect ( ) ;
double x_ratio = view_rect . width ( ) / scene_rect . width ( ) ;
double y_ratio = view_rect . height ( ) / scene_rect . height ( ) ;
double scale_factor = std : : min ( x_ratio , y_ratio ) * 0.9 ;
scale ( scale_factor , scale_factor ) ;
m_scale * = scale_factor ;
centerOn ( scene_rect . center ( ) ) ;
}
bool ImageViewer : : HasImage ( )
@ -81,37 +105,50 @@ bool ImageViewer::HasImage()
void ImageViewer : : wheelEvent ( QWheelEvent * event )
{
//qDebug() << "---------------+++++++++++++++++++++++++++++++++++++++++++++++++++ ";
if ( true ) //HasImage()
//if (true) //HasImage()
//{
// //Χ <> <CEA7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŵ<EFBFBD> <C5B4> <EFBFBD> https://blog.csdn.net/GoForwardToStep/article/details/77035287?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param
// // <20> <> ȡ<EFBFBD> <C8A1> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> view<65> <77> λ<EFBFBD> <CEBB> ;
// QPointF cursorPoint = event->pos();
// // <20> <> ȡ<EFBFBD> <C8A1> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> scene<6E> <65> λ<EFBFBD> <CEBB> ;
// QPointF scenePos = this->mapToScene(QPoint(cursorPoint.x(), cursorPoint.y()));
// // <20> <> ȡview<65> Ŀ<EFBFBD> <C4BF> <EFBFBD> ;
// qreal viewWidth = this->viewport()->width();
// qreal viewHeight = this->viewport()->height();
// // <20> <> ȡ<EFBFBD> <C8A1> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD> λ<EFBFBD> <CEBB> <EFBFBD> ൱<EFBFBD> <E0B5B1> view<65> <77> С <EFBFBD> ĺ<EFBFBD> <C4BA> ݱ<EFBFBD> <DDB1> <EFBFBD> ;
// qreal hScale = cursorPoint.x() / viewWidth;
// qreal vScale = cursorPoint.y() / viewHeight;
// // <20> <> <EFBFBD> ֵĹ<D6B5> <C4B9> <EFBFBD> <EFBFBD> <EFBFBD>
// QPoint scrollAmount = event->angleDelta();
// // <20> <> ֵ<EFBFBD> <D6B5> ʾ <EFBFBD> <CABE> <EFBFBD> <EFBFBD> Զ<EFBFBD> <D4B6> ʹ <EFBFBD> <CAB9> <EFBFBD> ߷Ŵ<DFB7> <C5B4> <EFBFBD> ֵ<EFBFBD> <D6B5> ʾ <EFBFBD> <CABE> <EFBFBD> <EFBFBD> ʹ <EFBFBD> <CAB9> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> С
// scrollAmount.y() > 0 ? zoomIn() : zoomOut();
// // <20> <> scene<6E> <65> <EFBFBD> <EFBFBD> ת<EFBFBD> <D7AA> Ϊ<EFBFBD> Ŵ<EFBFBD> <C5B4> <EFBFBD> С <EFBFBD> <D0A1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ;
// QPointF viewPoint = this->matrix().map(scenePos);
// // ͨ<> <CDA8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> view<65> Ŵ<EFBFBD> <C5B4> <EFBFBD> С <EFBFBD> <D0A1> <EFBFBD> <EFBFBD> չʾ scene<6E> <65> λ<EFBFBD> <CEBB> ;
// horizontalScrollBar()->setValue(int(viewPoint.x() - viewWidth * hScale));
// verticalScrollBar()->setValue(int(viewPoint.y() - viewHeight * vScale));
//}
if ( HasImage ( ) )
{
//Χ <> <CEA7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŵ<EFBFBD> <C5B4> <EFBFBD> https://blog.csdn.net/GoForwardToStep/article/details/77035287?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param
// <20> <> ȡ<EFBFBD> <C8A1> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> view<65> <77> λ<EFBFBD> <CEBB> ;
QPointF cursorPoint = event - > pos ( ) ;
// <20> <> ȡ<EFBFBD> <C8A1> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> scene<6E> <65> λ<EFBFBD> <CEBB> ;
QPointF scenePos = this - > mapToScene ( QPoint ( cursorPoint . x ( ) , cursorPoint . y ( ) ) ) ;
QPointF oldPos = mapToScene ( event - > pos ( ) ) ;
// <20> <> ȡview<65> Ŀ<EFBFBD> <C4BF> <EFBFBD> ;
qreal viewWidth = this - > viewport ( ) - > width ( ) ;
qreal viewHeight = this - > viewport ( ) - > height ( ) ;
// <20> <> ȡ<EFBFBD> <C8A1> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD> λ<EFBFBD> <CEBB> <EFBFBD> ൱<EFBFBD> <E0B5B1> view<65> <77> С <EFBFBD> ĺ<EFBFBD> <C4BA> ݱ<EFBFBD> <DDB1> <EFBFBD> ;
qreal hScale = cursorPoint . x ( ) / viewWidth ;
qreal vScale = cursorPoint . y ( ) / viewHeight ;
// <20> <> <EFBFBD> ֵĹ<D6B5> <C4B9> <EFBFBD> <EFBFBD> <EFBFBD>
QPoint scrollAmount = event - > angleDelta ( ) ;
// <20> <> ֵ<EFBFBD> <D6B5> ʾ <EFBFBD> <CABE> <EFBFBD> <EFBFBD> Զ<EFBFBD> <D4B6> ʹ <EFBFBD> <CAB9> <EFBFBD> ߷Ŵ<DFB7> <C5B4> <EFBFBD> ֵ<EFBFBD> <D6B5> ʾ <EFBFBD> <CABE> <EFBFBD> <EFBFBD> ʹ <EFBFBD> <CAB9> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> С
scrollAmount . y ( ) > 0 ? zoomIn ( ) : zoomOut ( ) ;
QPointF newPos = mapToScene ( event - > pos ( ) ) ;
// <20> <> scene<6E> <65> <EFBFBD> <EFBFBD> ת<EFBFBD> <D7AA> Ϊ<EFBFBD> Ŵ<EFBFBD> <C5B4> <EFBFBD> С <EFBFBD> <D0A1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ;
QPointF viewPoint = this - > matrix ( ) . map ( scenePos ) ;
// ͨ<> <CDA8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> view<65> Ŵ<EFBFBD> <C5B4> <EFBFBD> С <EFBFBD> <D0A1> <EFBFBD> <EFBFBD> չʾ scene<6E> <65> λ<EFBFBD> <CEBB> ;
horizontalScrollBar ( ) - > setValue ( int ( viewPoint . x ( ) - viewWidth * hScale ) ) ;
verticalScrollBar ( ) - > setValue ( int ( viewPoint . y ( ) - viewHeight * vScale ) ) ;
QPointF delta = newPos - oldPos ;
translate ( delta . x ( ) , delta . y ( ) ) ;
}
QGraphicsView: : wheelEvent( event ) ;
// QGraphicsView:: wheelEvent(event);//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
}
void ImageViewer : : scaling ( qreal scaleFactor )
@ -141,7 +178,7 @@ void ImageViewer::mouseMoveEvent(QMouseEvent *event)
{
if ( m_bMouseTranslate ) {
QPointF mouseDelta = mapToScene ( event - > pos ( ) ) - mapToScene ( m_lastMousePos ) ;
translate ( mouseDelta ) ;
translate ( mouseDelta . x ( ) , mouseDelta . y ( ) );
}
m_lastMousePos = event - > pos ( ) ;
@ -180,27 +217,6 @@ void ImageViewer::zoom(float scaleFactor)
m_scale * = scaleFactor ;
}
void ImageViewer : : translate ( QPointF delta )
{
// <20> <> <EFBFBD> ݵ<EFBFBD> ǰ zoom <20> <> <EFBFBD> <EFBFBD> ƽ <EFBFBD> <C6BD> <EFBFBD> <EFBFBD>
delta * = m_scale ;
delta * = m_translateSpeed ;
////<2F> <> <EFBFBD> <EFBFBD> 1<EFBFBD> <31>
//scene()->setSceneRect(scene()->sceneRect().x() - delta.x(), scene()->sceneRect().y() - delta.y(),
// scene()->sceneRect().width(), scene()->sceneRect().height());
//scene()->update();
//<2F> <> <EFBFBD> <EFBFBD> 2<EFBFBD> <32>
// view <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> µĵ<C2B5> <C4B5> <EFBFBD> Ϊê<CEAA> <C3AA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> λ scene
setTransformationAnchor ( QGraphicsView : : AnchorUnderMouse ) ;
QPoint newCenter ( VIEW_WIDTH / 2 - delta . x ( ) , VIEW_HEIGHT / 2 - delta . y ( ) ) ;
centerOn ( mapToScene ( newCenter ) ) ;
// scene <20> <> view <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ĵ<EFBFBD> <C4B5> <EFBFBD> Ϊê<CEAA> <C3AA>
setTransformationAnchor ( QGraphicsView : : AnchorViewCenter ) ;
}
void ImageViewer : : setTranslateSpeed ( qreal speed )
{
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ٶȷ<D9B6> Χ