Sử dụng QGraphicsScene::setSceneRect()
như vậy:
scene->setSceneRect(-180, -90, 360, 180);
Nếu bạn lo ngại về trục dọc được lật không đúng cách, bạn có một vài lựa chọn cho làm thế nào để đối phó với điều này. Một cách đơn giản là nhân với -1 bất cứ khi nào bạn thực hiện bất kỳ phép tính nào liên quan đến toạ độ y. Một cách khác là lật dọc QGraphicsView, sử dụng view->scale(1, -1)
để cảnh hiển thị chính xác.
Dưới đây là ví dụ hoạt động sử dụng kỹ thuật sau. Trong ví dụ này, tôi đã phân lớp QGraphicsScene để bạn có thể nhấp vào trong khung nhìn, và cảnh tùy chỉnh sẽ hiển thị vị trí bấm bằng cách sử dụng qDebug()
. Trong thực tế, bạn không thực sự cần phải phân lớp 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();
}
Tuyệt vời. Chỉ một câu hỏi: Tại sao 360? – QLands
@QLands 360 là chiều rộng chứ không phải tọa độ phù hợp. Để đi từ -180 đến 180, chiều rộng là 360. – Anthony
Có, thường chúng làm điểm x, điểm y, kích thước x và kích thước y – Lefsler