使用Qt在鼠标单击的精确位置绘制点

使用Qt在鼠标单击的精确位置绘制点,qt,mouseevent,qpainter,Qt,Mouseevent,Qpainter,我在做一个Qt项目。必须在QPaint区域上单击鼠标绘制点。该点的位置应该与鼠标单击的准确位置相同,但由于某些原因,该点绘制在与预期位置成对角线的另一个位置 守则: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { QGraphicsView * view = new QGraphicsView(this) ; ui->setupUi(this); QGridLay

我在做一个Qt项目。必须在QPaint区域上单击鼠标绘制点。该点的位置应该与鼠标单击的准确位置相同,但由于某些原因,该点绘制在与预期位置成对角线的另一个位置

守则:

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));
}

您的代码不正确。如果每次单击都创建重视图,则不应执行此操作。若您希望用户能够和场景交互,那个么创建新的自定义场景并在场景中完成所有需要的操作

#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

那我的答案呢?你试过了吗?它能按你的要求工作吗。我没有收到任何反馈。很抱歉,我暂时停止了此项目的工作,因为我需要提交另一个项目。我会尽快尝试你的代码。谢谢,我尝试了这个代码,它工作了,但我仍然有同样的问题。点的位置应该与鼠标单击的位置相同。@我想在场景中还是在整个主窗口中绘制点?这段代码应该画出用户在场景中单击的点。我希望它出现在场景中。@Shahdawi我在这里没有看到问题,在我的计算机中它工作正常(椭圆的中心是用户单击的点),编辑您的问题并显示完整的代码。您有哪个版本的Qt?
#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);