QGraphicsView 90 degree Rotation
-
@keksi-venksi said in QGraphicsView 90 degree Rotation:
I tried to add image in my post but i cant .
Can you help me on itHi! The image-upload feature on our forum is broken, you might see the picture but other users don't. Please upload your image to a image hoster of your choice (e.g. postimage.org) and embed the pic here with the following markup:

. See also How to insert image on this forum and Hitchhiker's Visual Guide to the Qt Forum. -
@Wieland
I have explained my query in my previous post . Please give your suggestions
Any how i have added the image here .This is how my graphicsview rotated .
Now i wanna apply zooming functionality using fitinview in this 90 degree rotated graphicsview .This is how Y Mode looks
-
Use two
QTransform
objects - one for rotation and one for scaling, then multiply them in the proper order (the order of multiplication matters as scaling and rotation don't commute). After that apply your transform to whatever you need. -
@kshegunov
Thanks for your reply .
Can you give some example code . -
QTransform rotation; rotation.rotate(90); QTransform scaling; scaling.scale(0.5, 1); setTransform(rotation * scaling); // Or QVector2D vector; vector = rotation * scaling * vector;
Modify according to your needs.
-
Thanks for your reply .
In my case I dont want to use scale to zoom
I wish to use fitInView() to achieve zoom.
In short note after applying transform (rotate 90 degree) fitInView() does not works fine . I want fitInView() to do zoom
-
Can any one help me on it .
Helps are really appreciable -
customgraphicsview.h
#ifndef CUSTOMGRAPHICSVIEW_H #define CUSTOMGRAPHICSVIEW_H #include <QGraphicsView> class CustomGraphicsView : public QGraphicsView { Q_OBJECT public: enum class Mode { x, y }; explicit CustomGraphicsView(QWidget *parent = nullptr); void reset(); void fit(); void setMode(Mode mode); protected: void wheelEvent(QWheelEvent* event) override; private: void updateTransform(); Mode m_mode = Mode::x; double m_scale = 1.0; }; #endif // CUSTOMGRAPHICSVIEW_H
customgraphicsview.cpp
#include "customgraphicsview.h" #include <QBrush> #include <QColor> #include <QWheelEvent> #include <QDebug> CustomGraphicsView::CustomGraphicsView(QWidget *parent) : QGraphicsView(parent) { setBackgroundBrush(QBrush(QColor("grey"))); } void CustomGraphicsView::reset() { m_mode = Mode::x; m_scale = 1.0; updateTransform(); } void CustomGraphicsView::fit() { auto const r = scene()->itemsBoundingRect(); switch (m_mode) { case Mode::x: { double f1 = width() / (r.width() + 2); double f2 = height() / (r.height() + 2); m_scale = qMin(f1,f2); updateTransform(); break; } case Mode::y: { double f1 = height() / (r.width() + 2); double f2 = width() / (r.height() + 2); m_scale = qMin(f1,f2); updateTransform(); break; } } } void CustomGraphicsView::setMode(CustomGraphicsView::Mode mode) { if (m_mode == mode) return; m_mode = mode; updateTransform(); } void CustomGraphicsView::wheelEvent(QWheelEvent *event) { auto const delta = (event->delta() <0.0) ? -1.0 : 1.0; m_scale += 0.1 * delta; updateTransform(); } void CustomGraphicsView::updateTransform() { QTransform t; if (m_mode == Mode::y) t.rotate(90); t.scale(m_scale, m_scale); setTransform(t); }
-
I would like to continue with this thread
in the normal mode im using view->fitInView(rect.x(),0,rect.width(),30)
in the 90 degree rotated mode im using view->fitInView(0,rect.y(),30,rect.height())
I have tried with different combinations of fitInView for 90 degree rotataion Nothing works
Can any one suggest me the coordinates for the fitInView() for the rotated view
Help me on it
-
@keksi-venksi Please try the code above that I just posted. If I understood you right, then it should meet your requirements :)
-
@Wieland
@WielandThanks for your reply
I am using fitInView in many places in my project to work stable . So I would like to get some suggestions for fitInView() coordinates
-
@keksi-venksi said in QGraphicsView 90 degree Rotation:
I am using fitInView in many places in my project to work stable . So I would like to get some suggestions for fitInView() coordinates
This is probably my last posting here because I think I can't help you. Have you seen my code above? The
fit()
function? It does just what you want, look: -
Hi
Thanks for your reply
In this example in fit method you are trying it to fit the view in the frame when we click a button but my case i have used fitInView() while zooming .So it should adjust the view with the zooming delta
So when ever we zoom fitInView() should be adjusted accordingly to the scene and update the scene as well
-
To All The issue has been fixed
what i did was simple
X mode fitinview(0,0,calcValue,viewRectHeight)
Y Mode fitinview(0,0,viewRectWidth,calcValue) ; rotate(90)
After calling fitinview again im calling rotate of 90 degree
-
@keksi-venksi
Could you please mark this topic as solved then. Others will find it easier if they have similar questions.