Domanda

Voglio creare un evento quando viene premuto un pulsante, il programma dovrebbe consentire di disegnare linee a mano libera utilizzando il puntatore del mouse in un'immagine.Attualmente sono nella fase in cui posso mostrare l'album di immagini in una finestra a schede.Qualcuno può aiutarmi fornendo qualche linea guida o indizi???

È stato utile?

Soluzione

Ecco un esempio di come dipingere con i movimenti del mouse:

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

Altri suggerimenti

La tua domanda è piuttosto ampia, temo.Consiglierei di fare qualche ricerca su ciò che vuoi ottenere, magari guardando come altre persone hanno risolto lo stesso problema.Otterrai il massimo da SO utilizzandolo maggiormente come risorsa per rispondere a domande specifiche.

Detto questo, ecco un paio di cose che potresti guardare:

QGraphicsScene:Una superficie che può contenere un gran numero di oggetti grafici 2D (ad es.le linee che consentirai all'utente di disegnare)

QGraphicsSceneMouseEvent:L'evento che devi catturare e gestire per ottenere input dal mouse nella scena.Puoi gestire questo evento creando una sottoclasse di QGraphicsScene e reimplementazione QGraphicsScene::mouseMoveEvent, o da installazione di un eventFilter sulla tua scena

Se stai visualizzando l'immagine utilizzando un semplice QWidget (voglio dire, non qualcosa di complicato come QGraphicsScene), semplicemente reimplementa il QWidget::mouseMoveEvent(QMouseEvent *e).Quando l'utente ha premuto un pulsante del mouse (e->buttons() != 0) potresti fare un dipinto all'interno dell'immagine.

Supponiamo che tu abbia la tua foto in un membro QImage img e traccia la posizione precedente del cursore in QPoint cursorLast.Supponiamo anche che tu visualizzi l'immagine utilizzando qualcosa come una QLabel, dove puoi semplicemente impostare l'immagine in una proprietà.Quindi potresti realizzare il dipinto in questo modo:

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

Non dimenticare di reimpostare il file cursorLast membro quando il mouse viene rilasciato:

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

Tieni presente che questo codice non è testato e potrei aver usato nomi leggermente sbagliati nei metodi, ma sarà facile trovare quelli reali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top