Pregunta

Quiero crear un evento cuando se presiona un botón. El programa debería permitir dibujar líneas a mano alzada usando el puntero del mouse en una imagen.Actualmente estoy en la etapa en la que puedo mostrar un álbum de imágenes en una ventana de pestaña.¿Alguien puede ayudar con eso proporcionando algunas pautas o pistas?

¿Fue útil?

Solución

Aquí hay un ejemplo de cómo pintar con movimientos del mouse:

http://qt-project.org/doc/qt-4.8 / Widgets-Scribble.html

Otros consejos

Tu pregunta es bastante amplia, me temo. Aconsejaría hacer algunas investigaciones sobre lo que quieres lograr, tal vez mirando cómo otras personas han resuelto el mismo problema. Aprovechará al máximo el uso más como un recurso para responder preguntas específicas.

Dicho esto, aquí hay un par de cosas que puede ver:

QGraphicsScene : una superficie que puede contener un gran número de gráficos 2D Objetos (es decir, las líneas que permitirá que el usuario dibuje)

QGraphicsSceneMouseEvent : el evento que necesita para atrapar y manejar en orden Para obtener entrada desde el mouse a su escena. Puede manejar este evento creando una subclase de QGraphicsScene y reimplenting QGraphicsScene::mouseMoveEvent , o por Instalación de un eventoFiltro en su escena. < / p>

Si está mostrando la imagen usando un QWidget simple (quiero decir, no algo complicado como QGraphicsScene), simplemente vuelva a implementar el QWidget::mouseMoveEvent(QMouseEvent *e).Cuando el usuario ha presionado un botón del mouse (e->buttons() != 0) podrías hacer una pintura dentro de la imagen.

Supongamos que tienes tu foto en un miembro. QImage img y rastrear la posición anterior del cursor en QPoint cursorLast.Supongamos también que muestra la imagen usando algo como QLabel, donde puede configurar la imagen en una propiedad.Entonces podrías hacer la pintura así:

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

No olvides restablecer el cursorLast miembro cuando se suelta el mouse:

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

Tenga en cuenta que este código no está probado y es posible que haya usado nombres ligeramente incorrectos en los métodos, pero será fácil encontrar los reales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top