Je me doutais bien qu'il y avait une explication rationnelle mais je trouve ça dommage de ne pas connaître l'état de la souris à tout moment.
Dans mon cas, je souhaitais détecter la fin du resize de la fenêtre afin de mettre à jour le widget central dont je souhaite fixer la résolution.
Ceci fait suite à cette discussion:
http://www.developpez.net/forums/d92...ets-adjacents/
J'ai désormais une fonction qui fixe la résolution du widget central tout en conservant la taille des dock widgets. C'est la MainWindow qui s'adapte à son widget central et non l'inverse (pour les raisons évoquées dans le thread) L'utilisateur choisit entre divers résolutions de la fenêtre de rendu. Cependant, lors qu'il retaille les fenêtres (MainWindow ou dock widgets), il perd la résolution qu'il a choisit. Donc j'ai ajouté une option "Lock resolution" et je voudrais détecter un événement OnEndResizing pour appeler la dite fonction.
Pour ce faire j'ai installé un event filter sur le widget central dans le constructeur de la MainWindow
ui->_Renderer->installEventFilter(this); // this = MainWindow
Je filtre les événements
1 2 3 4 5 6
| bool MainWindow::eventFilter(QObject* obj, QEvent* e)
{
if ((obj == ui->_Renderer) && (e->type() == QEvent::Resize))
return OnRendererResized(e);
return QMainWindow::eventFilter(obj, e);
} |
Traitement de l'événement resize de la fenêtre de rendu
1 2 3 4 5 6 7 8 9 10 11 12
| bool MainWindow::OnRendererResized(QEvent* resizeEvent)
{
Qt::MouseButtons m = QApplication::mouseButtons();
if (!ui->_aLockResolution->isChecked() || (QApplication::mouseButtons() & Qt::LeftButton))
{
_isRendererResized = true; // (*)
return false;
}
ResizeRenderer(_resolution);
return true;
} |
(*) On passe jamais là, je cherche donc un moyen de passer ici.
La fonction ResizeRenderer() doit être appelée uniquement à la fin d'un resize, lorsque le bouton gauche de la souris est relachée
1 2 3 4 5 6 7 8 9 10
| void MainWindow::mouseReleaseEvent(QMouseEvent* e)
{
if (_isRendererResized && (e->button() && Qt::LeftButton))
{
ResizeRenderer(_resolution);
_isRendererResized = false;
}
QMainWindow::mouseReleaseEvent(e);
} |
Partager