IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Pivoter l'affichage de 90°


Sujet :

Qt

  1. #1
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut Pivoter l'affichage de 90°
    Bonjour,

    Je développe des applications pour systèmes embarqués, tournant sous Linux (sans serveur X). J'utilise Qt for Embedded Linux 4.5 (Qt se charge de l'affichage avec le framebuffer). Mon appareil possède un écran tactile 4.3" en 480*272 px.

    Ces applications peuvent être appelées depuis d'autres. De manière générale, une application particulière sert de "Bureau" et permet de lancer les autres, cette application est par ailleurs désignée comme serveur applicatif Qt (c'est l'application lancée avec l'option -qws). Je souhaiterai pouvoir effectuer dynamiquement des rotations de l'affichage sur certaines applications (pour passer du format paysage au format portrait), comme le ferait par exemple l'iPhone quand on l'incline de 90° en regardant une vidéo.

    Mes recherches sont assez infructueuses pour le moment.

    J'ai une piste qui consiste à installer le driver "transformed" (configure -qt-gfx-transformed). En lançant l'application avec les options "-qws -display transformed", il est possible d'appeler la commande static_cast<QTransformedScreen*>(QScreen::instance())->setTransformation(QTransformedScreen::Rot90) avant d'afficher une fenêtre pour effectuer la rotation.
    Deux problèmes concernant cette solution :
    - On est obligé d'être dans l'application serveur pour pouvoir utiliser cette commande.
    - On doit utiliser cette commande avant d'afficher la fenêtre, il n'est donc pas possible de faire des transformation dynamiques.

    L'autre piste à laquelle je pense est d'englober ma Vue (modèle MVC) dans un QGraphicWidget, et d'effectuer une rotation de celui-ci. J'ignore par contre si cette méthode est viable et "propre"...

    Avez vous une idée pour parvenir au résultat souhaité de la manière la plus propre et fonctionnelle possible?

  2. #2
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Les recherches sur ma première piste ne mènent à rien d'exploitable.

    J'ai implémenté la seconde de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
        QWidget* widget = new QWidget(0); //Widget quelconque
     
        QGraphicsScene * scene = new QGraphicsScene(this);
     
        QGraphicsView * view = new QGraphicsView(scene,this);
        view->setStyleSheet("background-color: transparent;"
                            "border: 0px;");
        view->setFixedSize(size());
        view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
        view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
     
        QGraphicsProxyWidget * proxy = scene->addWidget(widget);
        widget->rotate(90);
        widget->setPos(240,0);
    Ça marche, j'ai eu des soucis avec les relations de parenté (le widget ajouté à la scène ne doit apparemment pas avoir de parent pour que le QGraphicProxyWidget qui en découle soit visible.), et avec la position des items (celle-ci ne se fait plus à partir de (0,0) coin supérieur gauche du widget parent, mais à partir du centre de la vue).

    Je pense avoir les outils nécessaire au changement d'orientation dynamique, reste à travailler un peu tout ça. Vive la doc Qt...

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Je ne pense pas que tu trouvera cela dans Qt, c'est trop spécifique à chaque OS. Mais tu peut peut être trouver comment dire à ton linux de changer d'orientation.

    Ta méthode avec QGraphics* et la seule solution alternative qui me viens à l'esprit.

  4. #4
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    J'ai trouvé une "solution" avec Linux qui consiste à ajouter des fonctionnalités au driver écran, puis utiliser fbset charger des configurations persos d'affichage. Le petit problème c'est qu'il est nécessaire d'éteindre et de rallumer l'écran à chaque utilisation. Très discret au milieu de l'appli

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Ryo2468 Voir le message
    J'ai trouvé une "solution" avec Linux qui consiste à ajouter des fonctionnalités au driver écran, puis utiliser fbset charger des configurations persos d'affichage. Le petit problème c'est qu'il est nécessaire d'éteindre et de rallumer l'écran à chaque utilisation. Très discret au milieu de l'appli
    ok. Si tu as la composition sur ton linux, tu peut utiliser QGraphicsView avec un fond transparent. Deux petit lien intéressante :
    http://labs.trolltech.com/blogs/2008...idgets-on-x11/
    http://qt.developpez.com/tutoriels/b.../customwindow/ (en cours de finalisation)

  6. #6
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Malheureusement non, pas de serveur X11 sur l'appareil. Qt travaille directement avec le framebuffer (Qt for Embedded Linux). Somme toute, ya des infos intéressantes dans ces deux liens, le tuto du second lien est très détaillé, ça fait plaisir.

    Du coup ça me donne des idées pour la suite. Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Hyperion-Explorer] Affichage des valeurs dans Pivot
    Par jdmbh dans le forum EPM (Hyperion)
    Réponses: 1
    Dernier message: 15/11/2008, 22h29
  2. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/04/2004, 09h21
  3. Affichage de documents PDF
    Par Dajon dans le forum C++Builder
    Réponses: 5
    Dernier message: 10/10/2002, 11h36
  4. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 09h43
  5. Affichage en passant par un buffer...
    Par Sirotilc dans le forum MFC
    Réponses: 5
    Dernier message: 27/05/2002, 21h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo