Je souhaite autoriser l'utilisateur à dessiner des lignes sur l'image à l'aide de la souris, J'utilise la vue graphique et l'événement souris mais la position obtenue n'est pas la bonne position relative à l'image ici est la fonction d'événement de sourisqt positionner la souris par rapport à l'image dans une vue graphique
void InitializationDialog::mousePressEvent(QMouseEvent *event) {
if(drawing) {
points.append(event->pos());
if(!points.isEmpty()) {
if(points.size()==1) {
QString fileName = list.at(choosed);
QImage image(fileName);
QGraphicsScene* scene = new QGraphicsScene();
QGraphicsPixmapItem* item = new QGraphicsPixmapItem(QPixmap::fromImage(image));
scene->addItem(item);
QColor color(255,0,0);
QBrush brush(color);
QPen pen(brush, 4);
QGraphicsLineItem* line = new QGraphicsLineItem(points.at(0).x(),points.at(0).y(),points.at(0).x()+1,points.at(0).y()+1);
line->setPen(pen);
scene->addItem(line);
ui->graphicsView->setScene(scene);
return;
}
}
}
}
qui devrait attirer un point (je le remplaçant par ligne longue d'un pixel pour ressembler à un point)
maintenant je le point rouge loin le clic de souris comme montré dans cette image
Comment puis-je le faire exactement sur le curseur de la souris?
Edit:
J'ai fait une classe personnalisée pour la scène graphique pour obtenir le clic par rapport à lui, j'ai essayé la souris remplaçant pressé pour la vue graphique, mais la scène n'est pas la même taille que vue graphique et le point encore loin la souris cliquez
souris enfoncé remplaçant ma scène personnalisée n'a pas aidé beaucoup parce que je reçois toujours la position de 0,0 cliquant sur la scène, peu importe où je clique
nouveau code de fichiers:
tête f ile
#ifndef INITGRAPH_H
#define INITGRAPH_H
#include <QtGui>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QPoint>
#include <QGraphicsSceneMouseEvent>
class InitGraph : public QGraphicsView {
Q_OBJECT
public:
InitGraph(QWidget *parent = 0);
virtual ~InitGraph() {};
};
class CustomScene : public QGraphicsScene {
Q_OBJECT
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
signals:
void pressed(QPoint p);
};
#endif // INITGRAPH_H
le fichier source
#include "initgraph.h"
InitGraph::InitGraph(QWidget *parent):QGraphicsView(parent)
{
}
void CustomScene::mousePressEvent(QGraphicsSceneMouseEvent *event){
qDebug(QString::number(event->pos().rx()).toLatin1());
QPoint p = event->pos().toPoint();
emit pressed(p);
}
Tout d'abord, je suggère de gérer le 'mousePressEvent' de la QGraphicsScene (http://doc.qt.io/qt-5/qgraphicsscene.html#mousePressEvent) ... Deuxièmement, je voudrais savoir pourquoi vous créez une nouvelle scène, un pixmap et un élément de ligne sur chaque 'mousePress' ??? Ce – Robert
est une mauvaise pratique, vous avez raison, j'étais pressé n'a donc pas remarqué, je considérerai les faire une fois et de les supprimer au destructor, merci de me rappeler –
je vais vérifier aussi le lien et vous laisser savoir si je J'ai eu des problèmes avec ça –