2012-05-04 46 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

相关问题