Pergunta

Eu quero criar um evento quando um botão foi pressionado programa deve permitir desenhar a mão livre, linhas usando o ponteiro do mouse em uma imagem.Neste momento estou na fase onde eu posso mostrar o álbum de fotos em uma guia de janela.Alguém pode ajudar com que, ao fornecer algumas orientações ou dicas???

Foi útil?

Solução

Aqui está um exemplo de como pintar com movimentos do mouse:

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

Outras dicas

Sua pergunta é bastante amplo, estou com medo.Eu aconselho a fazer alguma pesquisa sobre o que você deseja alcançar, talvez observando como as outras pessoas resolveram o mesmo problema.Você vai tirar o máximo proveito de TÃO usando-o mais como um recurso para responder a perguntas específicas.

Dito isso, aqui estão algumas coisas que você pode olhar:

QGraphicsScene:Uma superfície que pode conter um grande número de gráficos 2D de objetos (por exemplo,as linhas que você estará permitindo que o usuário desenhe)

QGraphicsSceneMouseEvent:O evento que você precisa para capturar e manipular, a fim de obter a entrada do mouse para a sua cena.Você pode lidar com esse evento seja pela criação de uma subclasse de QGraphicsScene e reimplenting QGraphicsScene::mouseMoveEvent, ou a instalação de um eventFilter na sua cena.

Se você estiver exibindo a imagem usando um simples QWidget (quero dizer, não é algo complicado, como QGraphicsScene), basta implementar o QWidget::mouseMoveEvent(QMouseEvent *e).Quando o usuário pressionou o botão do mouse (e->buttons() != 0) você poderia fazer uma pintura dentro da imagem.

Vamos supor que você tenha sua foto em um membro QImage img e controlar a posição do cursor anterior em QPoint cursorLast.Vamos supor também que você visualize a imagem usando algo como um QLabel, onde você pode definir a imagem em uma propriedade.Em seguida, você poderia fazer a pintura como esta:

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ão se esqueça de repor o cursorLast membro quando o mouse é liberado:

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

Observe que esse código não testado e eu posso ter usado pouco errada de nomes de métodos, mas não vai ser fácil encontrar a verdade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top