使用 QGraphicsView 平移縮放和旋轉
QGraphics
可用於將可視物件的複雜場景組織到框架中,使其更易於處理。
在此框架 QGraphicsView , QGraphicsScene 和 QGraphicsItems 中使用了三種主要型別的物件。QGraphicsItems 是場景中存在的基本視覺專案。
有許多型別是預先構建的並且可以使用,例如橢圓 ,線 ,路徑 , Pixmaps ,多邊形 ,矩形和文字 。
你也可以通過繼承 QGraphicsItem
來製作自己的物品。然後將這些物品放入 QGraphicsScene
,這基本上就是你計劃看的世界。物品可以在場景中移動,就像讓它們在你正在看的世界中移動一樣。專案定位和方向由稱為 QTransforms 的變換矩陣處理。Qt 內建了很好的功能,因此你通常不需要直接使用 QTransforms
,而是呼叫旋轉或縮放等功能,為你建立適當的變換。然後通過 QGraphicsView
中定義的透檢視(再次使用 QTransforms
)檢視場景,這是你在 UI 中放入視窗小部件的部分。
在下面的示例中,有一個非常簡單的場景,只有一個專案(畫素圖),它被放入場景並顯示在檢視中。通過開啟 DragMode
標誌,可以使用滑鼠平移場景,通過使用縮放和旋轉功能,可以使用滑鼠滾動縮放場景並使用箭頭鍵旋轉。
如果你想執行此示例,請建立將顯示的 View 例項,並使用包含影象 my_image.png 的字首/ images 建立一個資源檔案。
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsPixmapItem>
#include <QWheelEvent>
#include <QKeyEvent>
class View : public QGraphicsView
{
Q_OBJECT
public:
explicit View(QWidget *parent = 0) :
QGraphicsView(parent)
{
setDragMode(QGraphicsView::ScrollHandDrag);
QGraphicsPixmapItem *pixmapItem = new QGraphicsPixmapItem(QPixmap(":/images/my_image.png"));
pixmapItem->setTransformationMode(Qt::SmoothTransformation);
QGraphicsScene *scene = new QGraphicsScene();
scene->addItem(pixmapItem);
setScene(scene);
}
protected Q_SLOTS:
void wheelEvent(QWheelEvent *event)
{
if(event->delta() > 0)
scale(1.25, 1.25);
else
scale(0.8, 0.8);
}
void keyPressEvent(QKeyEvent *event)
{
if(event->key() == Qt::Key_Left)
rotate(1);
else if(event->key() == Qt::Key_Right)
rotate(-1);
}
};