Como implementar o widget arrastar e soltar em outro contêiner em qt?[fechado]

StackOverflow https://stackoverflow.com//questions/20002566

  •  20-12-2019
  •  | 
  •  

Pergunta

Tenho uma janela com vários containers.Qual é a maneira mais simples de implementar arrastar e soltar entre eles?

Foi útil?

Solução

Você tem que usar um QDrag* objeto.Então reimplemente:

virtual void mousePressEvent(QMouseEvent * event);
virtual void mouseReleaseEvent(QMouseEvent * event);
virtual void mouseMoveEvent(QMouseEvent *event);

Dentro desses eventos você gerenciará um ponto inicial (onde começa o arrasto) e um ponto final (onde você solta o widget).Você também usará o protocolo MIME para permitir que a estrutura gerencie a operação arrastar e soltar.

Um artigo mais útil sobre arrastar e soltar é este: Arraste e solte

Outras dicas

A maneira mais fácil, suponho, seria criar eventFilter classe, onde você filtraria eventos de arrastar e soltar e instalar isto (someWidget->installEventFilter) para todos os seus widgets, onde você deseja arrastar e soltar.Exemplo de documentos - aqui

atualizar:

O problema com o eventfilter é que você não precisa subclassificar todos os seus widgets para que eles possam arrastar e soltar.Basta instalar o filtro em qualquer widget que você deseja ter o filtro dnd e ele o terá.

Quanto ao filtro em si, ele nem sempre bloqueia eventos, etc. (fará isso se essa for sua intenção).Foi apenas um exemplo de como alguém pode usá-lo.

Apenas uma das inúmeras opções de arrastar e soltar:em dropEvent, dragMoveEvent, dragEnterEvent seu filtro possivelmente lembrará o ponteiro para o que você deseja soltar e em dropEvent emitirá sinal com o objeto, esse evento segura o ponteiro e o captura com o widget onde você o solta, e pronto, qualquer widget que tenha o filtro instalado terá o recurso de arrastar e soltar.

O objetivo do filtro de eventos é NÃO se preocupar com subclasses e conectar CADA widget se você tiver o tipo de evento comum, deseja capturar e processar de maneira semelhante, como arrastar e soltar eventos, por exemplo.

Presumi que você soubesse arrastar e soltar, mas pensei que substituir eventos em todos os widgets com o mesmo código repetidamente poderia não ser tão certo.Então eu mostrei como isso pode ser feito facilmente com um filtro de eventos para todos os widgets que você deseja arrastar e soltar.

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