Frage

Ich möchte ein Ereignis erstellen, wenn eine Taste gedrückt wurde. Das Programm soll das Zeichnen freihändiger Linien mit dem Mauszeiger in einem Bild ermöglichen.Derzeit bin ich in der Phase, in der ich ein Album mit Bildern in einem Tab-Fenster anzeigen kann.Kann jemand dabei helfen, indem er einige Richtlinien oder Hinweise liefert???

War es hilfreich?

Lösung

Hier ist ein Beispiel für das Malen mit Mausbewegungen:

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

Andere Tipps

Ich fürchte, Ihre Frage ist ziemlich weit gefasst.Ich würde Ihnen raten, etwas darüber zu recherchieren, was Sie erreichen möchten, und sich vielleicht anzusehen, wie andere Leute das gleiche Problem gelöst haben.Sie holen das Beste aus SO heraus, wenn Sie es eher als Ressource zur Beantwortung spezifischer Fragen nutzen.

Hier sind jedoch ein paar Dinge, die Sie sich ansehen könnten:

QGraphicsScene:Eine Oberfläche, die eine große Anzahl von 2D-Grafikobjekten enthalten kann (z. B.die Linien, die der Benutzer zeichnen darf)

QGraphicsSceneMouseEvent:Das Ereignis, das Sie abfangen und verarbeiten müssen, um Eingaben von der Maus in Ihre Szene zu erhalten.Sie können dieses Ereignis entweder behandeln, indem Sie eine Unterklasse von erstellen QGraphicsScene und Neuimplementierung QGraphicsScene::mouseMoveEvent, oder von Installieren eines EventFilters auf deiner Szene.

Wenn Sie das Bild mit einem einfachen QWidget anzeigen (ich meine, nicht etwas Kompliziertes wie QGraphicsScene), implementieren Sie es einfach erneut QWidget::mouseMoveEvent(QMouseEvent *e).Wenn der Benutzer eine Maustaste gedrückt hat (e->buttons() != 0) Sie könnten ein Bild innerhalb des Bildes malen.

Nehmen wir an, Sie haben Ihr Bild in einem Mitglied QImage img und verfolgen Sie die vorherige Cursorposition in QPoint cursorLast.Nehmen wir außerdem an, dass Sie das Bild mit etwas wie einem QLabel anzeigen, bei dem Sie das Bild einfach in einer Eigenschaft festlegen können.Dann könnten Sie das Bild so anfertigen:

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

Vergessen Sie nicht, das zurückzusetzen cursorLast Mitglied, wenn die Maus losgelassen wird:

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

Beachten Sie, dass dieser Code nicht getestet wurde und ich in den Methoden möglicherweise etwas falsche Namen verwendet habe, aber es ist leicht, die echten zu finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top