¿Cómo implementar un widget de arrastrar y soltar en otro contenedor en qt?[cerrado]

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

  •  20-12-2019
  •  | 
  •  

Pregunta

Tengo una ventana con varios contenedores.¿Cuál es la forma más sencilla de implementar arrastrar y soltar entre ellos?

¿Fue útil?

Solución

Tienes que usar un QDrag* objeto.Luego vuelva a implementar:

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

Dentro de esos eventos, administrará un punto de inicio (donde comienza el arrastre) y un punto final (donde suelta el widget).También utilizará el protocolo MIME para permitir que el marco administre la operación de arrastrar y soltar.

Un artículo más útil sobre arrastrar y soltar es este: Arrastrar y soltar

Otros consejos

La forma más fácil, supongo, sería crear eventFilter clase, donde filtrarías eventos de arrastrar y soltar y instalar él (someWidget->installEventFilter) a todos tus widgets, donde quieras arrastrar y soltar.Ejemplo de documentos: aquí

actualizar:

Lo que pasa con eventfilter es que no necesitas subclasificar todos tus widgets para que puedan arrastrarse y soltarse.Simplemente instale el filtro en cualquier widget que desee tener y lo tendrá.

En cuanto al filtro en sí, no siempre bloquea eventos, etc. (lo hará si esa es su intención).Fue solo un ejemplo de cómo se puede utilizar.

Sólo una de las innumerables opciones con arrastrar y soltar:en dropEvent, dragMoveEvent, dragEnterEvent su filtro posiblemente recordará el puntero a lo que desea soltar y en dropEvent emite una señal con el objeto, ese evento mantiene el puntero y lo captura con el widget donde lo suelta, y eso es todo, cualquier widget que tenga El filtro instalado tendrá que arrastrar y soltar.

El objetivo del filtro de eventos es NO molestarse en crear subclases y conectar CADA uno de los widgets si tiene el tipo de evento común y desea capturarlo y procesarlo de manera similar, como arrastrar y soltar eventos, por ejemplo.

Supuse que sabes cómo arrastrar y soltar, pero pensé que anular eventos en todos los widgets con el mismo código una y otra vez podría no ser tan correcto.Así que les mostré cómo se puede hacer fácilmente con un filtro de eventos para todos los widgets que desee arrastrar y soltar.

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