2014-11-29 2 views
0

Qt 프로젝트에서 작업 중입니다. 포인트는 Qpainter 영역에서 마우스를 클릭 할 때 그려야합니다. 포인트 위치는 마우스 클릭의 동일한 정확한 위치에 있어야하지만, 어떤 이유로 포인트는 예상 위치의 대각선으로 다른 위치에 그려집니다.Qt를 사용하여 마우스 클릭의 정확한 위치에 점을 그리기

코드 :

MainWindow::MainWindow(QWidget *parent) 
: QMainWindow(parent), ui(new Ui::MainWindow) 
{ 
QGraphicsView * view = new QGraphicsView(this) ; 
ui->setupUi(this); 
QGridLayout * gridLayout = new QGridLayout(ui->centralWidget); 
gridLayout->addWidget(view); 

scene = new QGraphicsScene(); 
scene->setSceneRect(50, 50, 350, 350); 

view->setScene(scene); 
} 

void MainWindow::mousePressEvent(QMouseEvent * e) 
{ 
QGraphicsView * view = new QGraphicsView(this) ; 
double rad = 1; 
QPointF pt = view->mapToScene(e->pos()); 
scene->addEllipse(pt.x()-rad, pt.y()-rad, rad*2.0, rad*2.0,QPen(), QBrush(Qt::SolidPattern)); 
} 
+0

무엇을 내 대답에? 그것을 시도 했습니까? 원하는대로 작동합니까? 나는 어떤 피드백도 얻지 못했다. – Chernobyl

+0

죄송합니다 다른 프로젝트를 제출해야하기 때문에 잠시 동안이 프로젝트 작업을 중단했습니다. 최대한 빨리 귀하의 코드를 시도 할 것입니다. –

답변

0

코드는 올바르지 않습니다. 클릭 할 때마다 무거운보기를 만들면 안됩니다. 해당 사용자가 씬과 상호 작용할 수있게하려면 새로운 사용자 정의 씬을 만들고 장면에 필요한 모든 모자를 사용하십시오.

#ifndef GRAPHICSSCENE_H 
#define GRAPHICSSCENE_H 

#include <QGraphicsScene> 
#include <QPoint> 
#include <QMouseEvent> 
class GraphicsScene : public QGraphicsScene 
{ 
    Q_OBJECT 
public: 
    explicit GraphicsScene(QObject *parent = 0); 
    ~GraphicsScene(); 

signals: 

protected: 
    void mousePressEvent(QGraphicsSceneMouseEvent *event); 
public slots: 
    private: 

}; 

#endif // GRAPHICSSCENE_H 

CPP :

#include "graphicsscene.h" 
#include <QDebug> 

GraphicsScene::GraphicsScene(QObject *parent) : 
    QGraphicsScene(parent) 
{ 
} 

GraphicsScene::~GraphicsScene() 
{ 
    qDebug() << "deleted scene"; 
} 


void GraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) 
{ 

     if (mouseEvent->button() == Qt::LeftButton) 
     { 
      double rad = 1; 
      QPointF pt = mouseEvent->scenePos(); 
      this->addEllipse(pt.x()-rad, pt.y()-rad, rad*2.0, rad*2.0,QPen(), 
      QBrush(Qt::SolidPattern)); 
     } 

    QGraphicsScene::mousePressEvent(mouseEvent); 
} 

사용, 예를 들어 :

그래서
#include "graphicsscene.h" 
//... 
GraphicsScene *scene = new GraphicsScene(this); 
someview->setScene(scene); 
+0

감사합니다.이 코드를 사용해 보았지만 여전히 같은 문제가 있습니다. 포인트 위치는 마우스 클릭의 동일한 정확한 위치에 있어야합니다. –

+0

@shahdewai 장면이나 전체 mainWindow에 드로잉 포인트를 원하십니까? 이 코드는 사용자가 장면을 클릭하는 지점을 그려야합니다. – Chernobyl

+0

나는 현장에서 그것을 원한다. –