Comment dessiner un point sur clic de souris) sur un QGraphicsScene?
J'ai le code suivant pour définir un QGraphicsScene
. Je tiens à cliquer sur la scène et tracer un point à l'endroit, j'ai cliqué. Comment pourrais-je faire cela? Voici mon code actuel:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QGraphicsScene *scene;
QGraphicsView *view = new QGraphicsView(this);
view->setGeometry(QRect(20, 50, 400, 400));
scene = new QGraphicsScene(50, 50, 350, 350);
view->setScene(scene);
}
OriginalL'auteur | 2011-10-20
Vous devez vous connecter pour publier un commentaire.
Mise à JOUR: Il y a une nouvelle classe appelée
QGraphicsSceneMouseEvent
qui le rend un peu plus facile.Je viens de terminer un exemple d'utilisation ici:
https://stackoverflow.com/a/26903599/999943
Il diffère avec la réponse ci-dessous en ce qu'il sous-classes
QGraphicsScene
, pasQGraphicsView
, et il utilisemouseEvent->scenePos()
donc il n'y a pas besoin de mapper manuellement les coordonnées.Vous êtes sur la bonne voie, mais vous avez encore un peu plus d'aller.
Vous avez besoin à la sous-classe
QGraphicsView
pour être en mesure de faire quelque chose avec les presses de la souris ou avec la souris à l'aide de communiqués deQMouseEvent
.QGraphicsView
n'est pas nativement avoir de dimension-moins de points. Vous aurez probablement besoin d'utiliserQGraphicsEllipse
élément ou tout simplement,scene->addEllipseItem()
avec un très petit rayon.Remarque l'utilisation de
mapToScene()
pour faire de lapos()
de l'événement de la carte correctement à l'endroit où la souris est cliqué sur la scène.Vous avez besoin pour ajouter une instance de votre sous-classé
QGraphicsView
à la centralWidget de la configuration de l'interface utilisateur si vous allez utiliser un formulaire.ou si votre interface utilisateur a une mise en page déjà, il ressemblera à ceci:
Si vous n'utilisez pas un
QMainWindow
et un formulaire, vous pouvez l'ajouter à uneQWidget
si vous définissez une mise en page, puis ajouter votreQGraphicsView
à cette mise en page d'une manière similaire. Si vous ne voulez pas d'une marge autour de votreQGraphicsView
, il suffit d'appeler spectacle sur elle et ne pas le placer à l'intérieur d'une mise en page différente.Et c'est tout. Maintenant, vous êtes dangereux avec
QGraphicsView
's et de leur interaction avec la souris.Assurez-vous de lire et d'étudier à propos de Qt La Vue Graphique Cadre et les exemples pour être efficace lors de l'utilisation de
QGraphicsView
etQGraphicsScene
. Ils sont des outils très puissants pour les graphiques 2D et peut avoir un peu d'une courbe d'apprentissage, mais ils en valent la peine.OriginalL'auteur phyatt