2013-06-26 1 views
0

J'essaie de faire un QWidget suivre un autre pendant que cela bouge.Suite à un QWidget tout en se déplaçant

En particulier, j'ai un QMainWindow avec un bouton. Ce bouton affiche un QWidget, le "suiveur ". Maintenant, j'aimerais que le suiveur suive réellement le QMainWindow quand je le fais glisser.

J'ai réimplémentées QMainWindow::moveEvent() qui met à jour la position du suiveur , mais il y a un retard énorme entre le mouvement et le suiveur. Ça marche, mais ça ressemble à quelque chose de 1990! En fait, je peux faire glisser la fenêtre et quand je m'arrête, le suiveur bougera.

Comment faire pour que le suiveur "collé" sur le QMainWindow? J'aimerais que ça colle à la fenêtre pendant que je la traîne!

Des indices?

À la votre!

+0

Essayez d'appeler 'QApplication :: processEvents()' juste après avoir défini une nouvelle position pour la fenêtre. –

Répondre

0

Docs disent moveEvent:

Lorsque le widget reçoit cet événement, il est déjà à la nouvelle position.

Alors peut-être une meilleure idée est de vérifier périodiquement (par exemple avec QTimer) Position de mainWindow et déplacer suiveur si elle a changé.

Après votre commentaire, une autre idée est de ré-écrire:

void MainWindow::mouseMoveEvent(QMouseEvent *event) 

avec l'utilisation du widget personnalisée (nouvelle forme ou utiliser Qt :: FramelessWindowHint) sans barre système, en faisant glisser serait fait par la barre réimplémentées personnalisée, et dans ce cas vous déplaceriez MainWindow et le suiveur ensemble.

+0

Eh bien ... ce n'est pas très sans CPU! :) Un collage peut être atteint, mais à haute fréquence. – senseiwa

Questions connexes