Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt : 5.10.0 - Qt Creator : 4.5.0 - Qt Installer : 3.0.2 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

[Qt4] passer un qglwidget en fullscreen?

Help!
J'utilise un simple QGLWidget pour faire une application basée sur OpenGL mais comment la passer en mode plein écran ? Rien dans la doc de Qt ! Et en faisant le bourrin en utilisant la commande Glut qui va bien, ça plante en beauté (normal ça doit rentrer en collision avec QtOpenGL qui est déjà un genre de couche type Glut)...
Merci d'avance !

Réponses

  • Salut,

    Est-ce que tu as déjà testé de créer ton widget avec le flag noborder (ou peut-être un autre/une combinaison) et en redimensionnant à la taille du bureau?
  • Pour obtenir le même résultat, j'ai simplement appelé QWidget::showFullScreen sur mon QGLWidget. Mais ce n'est pas le résultat escompté car je ne peux choisir nulle part de format vidéo (résolution/profondeur de couleur etc.). C'est le format du bureau qui est utilisé.
    Merci quand même, d'autres idées ?
  • November 2006 modifié
    regarde du coté de : showFullScreen, c'est une methode de QWidget dont QGLWidget devrait herité
  • euh jette un oeil à mon message antérieur de 35 minutes IDK, mais merci quand même
  • kellyb said:
    Pour obtenir le même résultat, j'ai simplement appelé QWidget::showFullScreen sur mon QGLWidget. Mais ce n'est pas le résultat escompté car je ne peux choisir nulle part de format vidéo (résolution/profondeur de couleur etc.). C'est le format du bureau qui est utilisé.
    Ça ne devrait pas. C'est sur quel système ? Quelle version de Qt ?
  • November 2006 modifié
    J'utilise Qt 4.2.1 sous windows xp...
    Tu dis que l'appel à showFullScreen sur mon QGLWidget devrait provoquer un changement de résolution de mon moniteur ? Si oui où suis-je censé donner la résolution de fullscreen etc. ?
  • kellyb said:
    Tu dis que l'appel à showFullScreen sur mon QGLWidget devrait provoquer un changement de résolution de mon moniteur ? Si oui où suis-je censé donner la résolution de fullscreen etc. ?
    Non je ne dis pas ça. La résolution restera bien entendu la même. C'est juste qu'on doit être capable de faire du OpenGL, or j'ai cru comprendre que ce n'est plus possible après être passé en plein écran ?

    Hum, peut-être ai-je mal compris la question. Le résultat escompté de QWidget::showFullScreen() devrait être d'afficher le widget en plein écran. Pas de changer la résolution de l'écran.
  • C'est là ce qu'il veut faire, ca et changer le format d'affichage.

    Je n'ai rien vu non plus dans Qt le permettant, mais tu es mieux placé pour le dire ;)
  • November 2006 modifié
    Dans ce cas, ce que kellyb veut faire n'est pas ce qui est indiqué dans le titre - passer un QGLWidget en « full screen » - et si la fonction QWidget::showFullScreen() permet bien de passer en « full screen » ou plein écran, elle ne permet bien sûr pas de modifier la résolution de l'écran. Pour ce qui est de la profondeur, il doit être possible de sélectionner la profondeur adéquate en demandant le bon format.

    Sinon, Qt ne permet à ma connaissance pas de changer la résolution de l'écran. Dans un monde parfait, il devrait être possible d'y arriver en utilisant QApplication::desktop() mais ce n'est à ma connaissance pas implanté.
  • Merci pour vos réponses.
    Effectivement dans ma question j'ai fait l'amalgame entre "plein écran" et "choix d'un format plein écran, incluant le choix de la résolution, et pourquoi pas du taux de rafraichissement, profondeur de couleurs etc.", en somme tout ce que propose GLUT (c'est le gestionnaire que je connais) ou autres Direct3D.
  • Qt te sert à quoi dans ce scénario? N'aurais-ru pas plutôt intérêt à basculer sur un framework spécialisé 3D tel qu'OGRE ou Irrlicht ou... ?
  • En fait j'avais commencé une grosse application Qt basée sur un moteur 2D temps réel (pas de 3D). Le problème est que le QPainter de Qt est vraiment très lent (même si son rapport souplesse/performance est admirable). Voilà pourquoi je passe tout le graphisme en OpenGL. Et au passage, j'espérais en profiter pour offrir un mode plein écran !
  • Euh... Normalement, il n'est pas si lent que ça le painter :P
    T'es sûr que t'as optimisé ton truc? :D

    Sinon, vu ce sur quoi tu es parti, Qt a l'air d'être un choix bien peu judicieux: pourquoi ne pas utiliser SDL pour te faire un moteur basique?
  • November 2006 modifié
    Je viens juste d'y penser.... Tu peux embarquer SDL dans une app Qt pour le graphisme si tu veux... C'est juste une variable d'environnement à mettre ;)

    Edit: à oublier bien sûr ça ne règle pas le problème du fullscreen, désolé du up stupide :(
  • Parles en toujours ca peut m'interesser :)
  • Ma première solution était d'utiliser SDL. Mais j'ai vite pesé le pour et le contre, entre une API 2D portable bordélique écrite en C, pas ou peu accélérée par le matériel, et une API 2D/3D portable bien écrite en C, avec un bon support Qt, complètement accélérée par le matériel, et permettant des effets époustouflants à moindres frais (pixels shaders, tansformations, jeux d'éclairage etc.)
    Voilà voilà :)
  • Ok, ce sera l'occasion d'un article sur le wiki peut-être. Il y aura plus sa place qu'ici ;)
  • J'ai oublié de signaler que je connais assez bien l'API graphique Qt (Arthur) et malheureusement elle est extrêmement lourde pour la machine (même si elle s'en tire mieux que d'autres API concurrentes (voir par ex le billet 'Benchmarks' du 23 oct 2006 de zack, developpeur pour la partie graphique de Qt : http://zrusin.blogspot.com#116159369691386572)). Un simple exemple est l'effondrement des performances lors du dessin dans un widget d'une taille conséquente (>500000 pxl).
  • kellyb said:
    entre une API 2D portable bordélique écrite en C, pas ou peu accélérée par le matériel
    Pardon?!
    T'as pas du voir beaucoup d'api pour dire que SDL est bordélique :/ C'est l'une des API les plus propres pour du dessin, avec Allegro.
    Touches à l'api WIN32 en C et tu verras ce que c'est que du bordel :P
    kellyb said:
    et une API 2D/3D portable bien écrite en C, avec un bon support Qt, complètement accélérée par le matériel, et permettant des effets époustouflants à moindres frais (pixels shaders, tansformations, jeux d'éclairage etc.)
    Voilà voilà :)
    Pour ça, c'est des frameworks particuliers si tu veux bien le faire, genre Ogre.
    Que tu peux aussi embarquer dans un widget Qt ;) (et tu pourras passer plein écran assez simplement, conserver un support multi-plateforme...)
  • November 2006 modifié
    ca m'intéresse , je vais jeter a oeil a ogre
    ... mais ca me chagrine de devoir me taper une enorme API alors qu'il aurait suffit d'une fonctionnalité de plus dans QtOpenGL et c'était bon :'(
  • Je suis bien d'accord, tu l'as ajouté au task-tracker au cas où?

    Par contre, il y a moyen de faire ça en fullscreen avec SDL sans doute. Le seul pépin est qu'il faut un OS supportant les fonctions getenv/putenv/unsetenv. Les 2 premières sont émulées par SDL, mais pas unsetenv. Laquelle est nécessaire pour annuler la cible actuelle qui serait un widget.
    A toi de voir si tu es chaud pour basculer sur SDL (et reprogrammer ton moteur avec son format); AMHA, c'est le mieux que tu ais à faire, Ogre étant rééllement trop gros pour ce que tu veux faire.

    @pasnox> l'article est dans la section documentation.
  • Merci IrmatDen pour tes conseils avisés!
    Je suis en train de peser les pour et les contres, mais l'implémentation basée sur OpenGL me plaît beaucoup, mise à part ce "petit" problème de fullscreen.
    Tu as parlé d'un tasktracker? Où est-ce que je peux le trouver?
    Cela dit je pourrai sans doute apporter l'idée en main propre à Trolltech puisque j'ai la chance d'effectuer un stage chez eux à Oslo d'ici deux mois!
Connectez-vous ou Inscrivez-vous pour répondre.