2012-05-04 47 views
19

我想在QGraphicsScene中繪製多邊形,但多邊形具有經度/緯度位置。在一個方形投影座標從雲:如何將QGraphicsScene/View設置爲特定座標系

     ^
         90 
         | 
         | 
-180----------------------------------->180 
         | 
         | 
        -90 

我如何可以設置QGraphicsScene/QGraphicsView這樣的投影?

非常感謝,

卡洛斯。

回答

18

使用QGraphicsScene::setSceneRect()像這樣:

scene->setSceneRect(-180, -90, 360, 180); 

如果你關心垂直軸被錯誤翻轉,您有如何處理這幾個選項。一種方法是隻要你進行涉及y座標的任何計算就簡單乘以-1。另一種方法是垂直翻轉QGraphicsView,使用view->scale(1, -1)以便場景正確顯示。

下面是使用後一種技術的工作示例。在這個例子中,我已經分類了QGraphicsScene,以便您可以點擊視圖,自定義場景將使用qDebug()顯示點擊位置。在實踐中,你實際上並不需要繼承QGraphicsScene。

#include <QtGui> 

class CustomScene : public QGraphicsScene 
{ 
protected: 
    void mousePressEvent(QGraphicsSceneMouseEvent *event) 
    { 
     qDebug() << event->scenePos(); 
    } 
}; 

class MainWindow : public QMainWindow 
{ 
public: 
    MainWindow() 
    { 
     QGraphicsScene *scene = new CustomScene; 
     QGraphicsView *view = new QGraphicsView(this); 
     scene->setSceneRect(-180, -90, 360, 180); 
     view->setScene(scene); 
     view->scale(1, -1); 
     setCentralWidget(view); 
    } 
}; 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    MainWindow w; 
    w.show(); 
    return a.exec(); 
} 
+0

優秀。只有一個問題:爲什麼選擇360? – QLands

+0

@QLands 360是寬度,而不是正確的座標。從-180到180,寬度是360. – Anthony

+0

是的,通常他們做點x,點y,尺寸x和尺寸y – Lefsler

相關問題