Feature - Fonctionnalité #4800
[Qt5.6] Scaling non fonctionnel
100%
Description
Fenêtre trop grande en maximise, trop petite en normale....
La chasse aux tailles gravées dans le code :)
Sous-tâches
Historique
#1 Mis à jour par Icham Sirat il y a plus de 8 ans
- % réalisé changé de 0 à 50
Trouvé après toutes ces recherches : c'est le showMaximised() appelé dans l'AbulEduMenuFeuilleV1 svp...
Au passage j'ai corrigé le bug qui faisait que parfois il maximisait 2 fois avant de réduire.
J'effectue quelques tests croisés.
#2 Mis à jour par Icham Sirat il y a plus de 8 ans
- Tracker changé de Bug à Feature - Fonctionnalité
- Projet changé de Raconte-Moi à leterrier-developpeurs
#3 Mis à jour par Icham Sirat il y a plus de 8 ans
J'ai la solution : il faut fixer la taille maximale de la fenêtre par rapport à l'écran.
Seulement, il se pose la question du multi-écrans et de l'affichage déporté (videoprojecteur...).
Je viens de trouver comment gérer le changement d'écran :
connect(window()->windowHandle(), SIGNAL(screenChanged(QScreen*)), this, SLOT(screenChanged(QScreen*)));
Le problème, c'est que la QWindow retournée par windowHandle() est NULL tant que la fenêtre n'est pas complétement chargée. Le contournement consiste à créer un signal dans la méthode showEvent(), emit window_loaded() par exemple et de se connecter à ce signal pour ensuite récupérer la QWindow :)
C'est alambiquée mais c'est une solution viable =)
#4 Mis à jour par Icham Sirat il y a plus de 8 ans
########## ****.h ########## private slots: void showEvent(QShowEvent *ev); void setMaxSize(QScreen *); void getWindow(); signals : void guiLoaded(); ######### ****.cpp ######### # dans le constructeur connect(this, SIGNAL(guiLoaded()), this, SLOT(getWindow())); void ****::showEvent(QShowEvent *ev) { QMainWindow::showEvent(ev); this->setMaximumSize(abeApp->primaryScreen()->size()); emit guiLoaded(); } void ****::getWindow() { /* la gui est chargée, on peut récupérer la QWindow */ connect(window()->windowHandle(), SIGNAL(screenChanged(QScreen*)), this, SLOT(setMaxSize(QScreen*))); } void ****::setMaxSize(QScreen *s) { qDebug() << "QScreen changed : : " << s->size(); this->setMaximumSize(s->size()); }
#5 Mis à jour par Icham Sirat il y a plus de 8 ans
Bon je ne comprends rien sur raconte-moi : 2 heures que je bataille à enlever les tailles fixes, enlever le menufeuille (pour tests), faire des setFullScreen (mais on ne voit plus la barre des taches), à builder sur jenkins et à copier sur tablette... Et il est toujours en tout petit à la première apparition !
#6 Mis à jour par Icham Sirat il y a plus de 8 ans
AHHHH trouvé : si la QMainWindow est frameless sous Windows, le scaling n'est pas bon.
C'est un bug rejeté de chez Qt (au moins au niveau Windows OS https://bugreports.qt.io/browse/QTBUG-8361)
Car, du point de vue gestionnaire desktop Windows, une fenêtre frameless est obligatoirement fullscreen.
Il faut contourner le problème en faisant :
Please consider workaround this windows issue calling setGeometry(QApplication::desktop()->availableGeometry()) in showMaximized() for frameless window.