A mão livre, desenho linear em uma imagem usando o QT [fechado]
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???
Solução
Aqui está um exemplo de como pintar com movimentos do mouse:
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.