Question

Je souhaite créer un événement lorsqu'un bouton a été enfoncé. Le programme devrait permettre de tracer des lignes à main levée à l'aide du pointeur de la souris dans une image.Actuellement, je suis au stade où je peux afficher un album de photos dans une fenêtre à onglets.Quelqu'un peut-il aider en fournissant des lignes directrices ou des indices ???

Était-ce utile?

La solution

Voici un exemple de la façon de peindre avec les mouvements de la souris:

http://qt-project.org/doc/qt-4.8 / widgets-stribble.html

Autres conseils

Votre question est assez large, j'en ai peur.Je vous conseillerais de faire des recherches sur ce que vous souhaitez réaliser, peut-être en regardant comment d'autres personnes ont résolu le même problème.Vous tirerez le meilleur parti de SO en l’utilisant davantage comme ressource pour répondre à des questions spécifiques.

Cela dit, voici quelques éléments que vous pourriez examiner :

QGraphicsScene:Une surface qui peut contenir un grand nombre d'objets graphiques 2D (c.-à-d.les lignes que vous autoriserez l'utilisateur à tracer)

QGraphicsSceneMouseEvent:L'événement que vous devez capturer et gérer afin d'obtenir une entrée de la souris sur votre scène.Vous pouvez gérer cet événement soit en créant une sous-classe de QGraphicsScene et réimplémentation QGraphicsScene::mouseMoveEvent, ou par installer un eventFilter sur votre scène.

Si vous affichez l'image à l'aide d'un simple QWidget (je veux dire, pas quelque chose de compliqué comme QGraphicsScene), réimplémentez simplement le QWidget::mouseMoveEvent(QMouseEvent *e).Lorsque l'utilisateur a appuyé sur un bouton de la souris (e->buttons() != 0) vous pourriez faire un tableau à l'intérieur de l'image.

Supposons que vous ayez votre photo dans un membre QImage img et suivez la position précédente du curseur dans QPoint cursorLast.Supposons également que vous affichez l'image en utilisant quelque chose comme un QLabel, où vous pouvez simplement définir l'image dans une propriété.Ensuite, vous pourriez faire la peinture comme ceci :

void MyWidget::mouseMoveEvent(QMouseEvent *e) {
    if(e->buttons()) {
        if(!cursorLast.isNull()) {
            QPainter p(&img); // and set pen
            p.drawLine(cursorLast, e->pos());
            p.end();
            setImage(img); // update image in your view
        }
        cursorLast = e->pos();
    }
}

N'oubliez pas de réinitialiser le cursorLast membre lorsque la souris est relâchée :

void MyWidget::mouseReleaseEvent(QMouseEvent *e) {
    cursorLast = QPoint(); // reset
}

Notez que ce code n'est pas testé et j'ai peut-être utilisé des noms légèrement erronés dans les méthodes, mais il sera facile de trouver les vrais.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top