L'application sur laquelle je travaille a une interface utilisateur personnalisée qui m'a demandé de supprimer la barre de titre de la fenêtre principale. Malheureusement, je ne peux pas comprendre comment le faire, afin que je puisse déplacer l'application à l'écran :)
Le code que j'ai en train de supprimer la barre de titre est le suivant: p> aucune idée de la manière dont je peux déplacer la fenêtre à l'aide d'un autre widget ou de la fenêtre de formulaire principale elle-même? p> Merci P> P>
3 Réponses :
La plupart des moyens intuitifs de le faire cliqueraient sur la surface du widget et le glissant. Afin de y parvenir, vous devez suivre certaines étapes.
La méthode se passe comme suit: Lorsque l'utilisateur appuie sur le widget, définissez un drapeau booléen et stockez la position de la souris puis lorsque le bouton est libéré, définissez à faux. La prochaine étape consiste à déplacer le widget. Dans la MousemoveEvent, vérifiez si le drapeau est défini. S'il est défini, prenez la nouvelle position de la souris. Calculez la différence entre la nouvelle position et celle stockée. Ensuite, réglez la position de la fenêtre sur la position d'origine + le mouvement de la souris calculé. Ensuite, stockez la nouvelle position de la souris. P>
Le code requis serait celui-ci: p>
Voir aussi Exemple d'horloge en forme de QT, qui fait la même chose: doc.trolltech.com/4.5 /widgets-shapedclock.html
Erelender, même après plus d'un an, je reviens toujours à ma propre question pour obtenir votre réponse. Merci encore pour avoir fourni cela. =) J'utilise GlobalPos () au lieu de cela, sinon c'est nerveux
Comme je l'ai mentionné ci-dessous, l'utilisation de fenêtres -> Déplacer () ne déplace que la fenêtre à l'intérieur i> l'écran, aucun coin ne peut être déplacé à l'extérieur, c'est très différent de ce qu'In Windows Manager i > fait
C'est pourquoi alors décourager en utilisant des liens dans la réponse. Tous les liens de l'exemple de l'horloge sont morts. Bon travail les gars.
L'utilisation de liens est correct tant que la réponse n'est pas entièrement des liens. Par exemple, cette réponse serait toujours valide si les liens ont été supprimés. Ils sont uniquement destinés à améliorer la réponse. De plus, la cible prévue n'est pas un coin obscur de la bande, il est toujours accessible via une recherche simple. Il n'y a pas besoin d'être sarcastique. Le commentaire sur le comportement de saut peut être valide cependant, je me souviens d'avoir utilisé cette implémentation plusieurs fois sans une telle chose, mais les choses auraient pu changer avec les années de passage.
Vous devez essayer cela à la place
class MyWidget : public QMainWindow { protected: void mouseMoveEvent(QMouseEvent* event); void mousePressEvent(QMouseEvent* event); void mouseReleaseEvent(QMouseEvent* event); private: QPoint mLastMousePosition; bool mMoving; } /// Source: void MyWidget::mousePressEvent(QMouseEvent* event) { if(event->button() == Qt::LeftButton) { mMoving = true; mLastMousePosition = event->pos(); } } void MyWidget::mouseMoveEvent(QMouseEvent* event) { if( event->buttons().testFlag(Qt::LeftButton) && mMoving) { this->move(this->pos() + (event->pos() - mLastMousePosition)); } } void MyWidget::mouseReleaseEvent(QMouseEvent* event) { if(event->button() == Qt::LeftButton) { mMoving = false; } }
Je ne suis pas très bien réactionné, mais vous pouvez enregistrer un gestionnaire d'événements personnalisé, il est facile de nombreux exemples sur Google. Vérifier l'événement de la souris, avant que vous puissiez utiliser QObject :: Sender () et obtenir le métaobject pour connaître la classe de l'objet THA est enfoncé si l'objet est un QFrame ou QWidget ou une autre classe que vous souhaitez utiliser pour déplacer la fenêtre. . Ensuite, vous pouvez appliquer une logique pour faire glisser la fenêtre. Les pros sont que vous pouvez utiliser avec toutes les fenêtres et encadrer sans réimplémenter chacun d'entre eux avec des événements de souris P>