En faisant glisser un QWidget dans QT 5
Je dois faire quelque chose comme l'interface iOS, 3x3 domaine des icônes qui peuvent être déplacées à modifier leur position, et puis n'oubliez pas dans un fichier XML.
J'ai décidé d'utiliser la classe de la Grille (QWidget est parent) comme un conteneur et ma propre classe, hérite de QWidget, comme des éléments.
Maintenant je suis en train d'apprendre à réaliser un drag & drop pour QWidget, mais il semble que vous êtes seulement en mesure de tomber sur un QWidget, mais il est impossible de la faire glisser.
Est-elle impossible? Comment puis-je déplacer cette chose?
Voulez-vous simplement à déplacer, ou de les glisser/déposer? Il suffit de le déplacer, il est plus facile (stackoverflow.com/questions/12219727/...), glisser/déposer devient compliqué (stackoverflow.com/questions/24582383/...).
OriginalL'auteur Leonid Bor | 2013-08-18
Vous devez vous connecter pour publier un commentaire.
Glisser un widget n'est pas facile. Beaucoup de codage que vous avez à faire vous-même.
De la Qt Docs:
Cela signifie que, lorsque votre widget reçoit un message qu'il est traîné, par exemple, comme avec un mousepress, il doit créer un QDrag objet.
Dans le QDrag objet, vous pouvez définir un pixmap, qui représente votre traîné widget. Si vous cachez votre widget à ce stade, il semble comme si le pointeur de votre souris 'pris' le widget.
En outre vous avez besoin d'un QMimeData objet. En cela, vous pouvez mettre toutes sortes de données, qui décrit votre widget. Dans votre cas d'utilisation, quelque chose qui vous permet d'identifier votre widget. Car, et c'est là la partie la plus difficile: Vous avez à faire vous-même en mouvement.
Le widget, qui est parente de la grille, reçoit la baisse de l'événement et de lit à partir de la mime des données, qui widget souhaite me déplacer. À partir de la QDropEvent il obtient le point où le widget doit être déplacé. C'est ce que vous avez le code: Le repositionnement de votre grille de mise en page. Et n'oubliez pas de mettre à jour le fichier xml.
Bor, le QDrag objet vous donne un moyen d'avoir une icône sous le pointeur de votre souris. Et il donne un moyen de transmettre des données à propos de l'objet déplacé à la baisse du récepteur. Si vous pouvez obtenir cette information, sinon... pas de problème. addWidget() et removeWidget() sont certainement un moyen d'effectuer le déplacement.
OriginalL'auteur Greenflow
faire un truc alors vous pouvez glisser QWidget aussi,
Maintenant utiliser cette
widgetPixmap
comme le pixmap pouryourDragObject->setPixmap();
exemple,
OriginalL'auteur Akhil V Suku
L'intervalle Qt wiki contient un QtQuick exemple sur la façon d'imiter le iOS icône de l'interface, avec moins de 80 lignes de code.
Vous pouvez le trouver ici.
Je pense que, si vous lisez le qml, vous pouvez le traduire dans un QGridLayout/QWidget mise en page. Après tout, qml est juste une autre langue, décrivant la mise en page.
OriginalL'auteur huysentruitw