11
votes

Qt4 Faites glisser la fenêtre sans barre de titre

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: xxx

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?

Merci

qt4

0 commentaires

3 Réponses :


13
votes

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.

Le code requis serait celui-ci:

AVERTISSEMENT: Cet exemple de code est incorrect et entraînera un comportement de saut lors du glissement de la fenêtre. Veuillez utiliser le code de la Exemple d'horloge en forme QT à la place. xxx


5 commentaires

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 l'écran, aucun coin ne peut être déplacé à l'extérieur, c'est très différent de ce qu'In Windows Manager 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.



3
votes

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;
    }
}


0 commentaires

0
votes

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


0 commentaires