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 :

SDL et Qt4.2


Sujet :

Qt

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 82
    Par défaut SDL et Qt4.2
    Bonjour, voilà mon probleme :

    J'essaye en ce moment d'intégrer la SDL à Qt, j'ai lu un tutoriel qui indiquait comment faire, seulement leur exemple ne marche pas, et je ne le comprends pas.

    Sauriez-vous par hasard intégrer la SDL à Qt? si oui n'hesiter pas à m'en faire part je vous en serait tres reconnaissant.

    Merci d'avance.



    The Sleeping Lionheart.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 83
    Par défaut
    Qu'est-ce qui ne marche pas ? Est-ce qu'il y a des messages d'erreur ? Quelle partie ne comprends-tu pas ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 82
    Par défaut
    Oui c'est justement ce tuto qui me pose probleme, j'ai compris comment on fait à peu pres pour intégrer la SDL, cependant lorsque je test la souce du tutoriel, mon IDE me renvoie une erreur, par rapport à un tableau (enfin je suppose que s'en est un) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sprintf(windowid, "SDL_WINDOWID=0x%lx", static_cast<qlonglong>(winId()));
    le static_cast<qlonglong>, en fait je ne sais pas du tout ce que c'est, car il faut dire que je n'utilise pas la STL et toutes ses capacités.
    Enfin je voudrais surtout savoir si je ne peux pas remplacer ce static_cast<> par autre chose. Bref si on veut bien faire il faudrait me donner des explications sur les parametres passer à la fonction sprintf() ^^ .

    Merci.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 83
    Par défaut
    Il n'y a pas de tableau, static_cast<qlonglong>(x) ne fait que « caster » x en qlonglong (un type d'entier défini dans Qt).

    Est-ce qu'il y a des messages d'erreur ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 82
    Par défaut
    Oui il y a une erreur lorsque je construit le projet.
    la voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    error: invalid static_cast from type 'HWND_*' to type 'qlonglong'

  6. #6
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Oui, désolé, j'ai posté le code à partir de linux donc c'est passé sans problème.
    Remplace par un reinterpret_cast<> et ce sera tout bon

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 82
    Par défaut
    Voilà j'ai effectuer le changement, et tout marche, merci beaucoup.

    PS: pour ceux qui serait dans le même probleme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sprintf(windowid, "SDL_WINDOWID=0x%lx", reinterpret_cast<qlonglong>(winId()));

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 82
    Par défaut
    J'aimerais cependant poser une question de plus :

    Lorsque j'enlève tout ce qui concerne le starfield, et que je veux simplement afficher une image dans la fenetre cela ne marche pas. On ne peut voir l'image qu'après que l'on ai fait passer une autre fenetre par dessus celle de l'appli, c'est comme si le SDL_Flip() ne marchais pas.

    voici ma source :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    #ifndef assai_H
    #define assai_H
     
     
     
    #include <QApplication>
    #include <QWidget>
     
    #include <SDL/SDL.h>
     
    #undef main
     
    #include <vector>
    #include <cstdlib>
     
    class SDLWidget : public QWidget
    {
    	Q_OBJECT
     
    public:
    	SDLWidget()
    	{
    		resize(320, 200);
     
    			char windowid[64];
    			sprintf(windowid, "SDL_WINDOWID=0x%lx", reinterpret_cast<qlonglong>(winId()));
    			SDL_putenv(windowid);
     
     
    			SDL_Init(SDL_INIT_VIDEO);
    			screen = SDL_SetVideoMode(width(), height(), 32, SDL_SWSURFACE);
    			windowInitialized = true;
     
    			image = SDL_LoadBMP("1.bmp");
     
    			posImg.x = 0;
    			posImg.y = 0;
     
    			SDL_BlitSurface(image, NULL, screen, &posImg);
    			SDL_Flip(screen);
    	}
     
    	virtual ~SDLWidget()
    	{
    	    SDL_FreeSurface(image);
    		SDL_Quit();
    	}
     
    private:
     
    	bool windowInitialized;
    	SDL_Surface *screen;
    	SDL_Surface *image;
    	SDL_Rect posImg;
     
    };
     
    #endif

  9. #9
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Il faut rajouter les attributs de fenêtre qui vont bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    setAttribute(Qt::WA_PaintOnScreen);
    setAttribute(Qt::WA_NoSystemBackground);
    Edit: de préférence dans le constructeur si c'est un widget dédié à SDL

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 82
    Par défaut
    J'ai rajouter ces deux fonctions dans mon constructeur, cependant je suis toujours face au même probleme, l'image n'apparait que si je fait passer une autre fenetre au-dessus de l'appli.

  11. #11
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Au temps pour moi, il faut que tu mettes SDL_Flip(screen); dans la surcharge de paintEvent, conformément à l'attribut que tu donnes au widget...

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 82
    Par défaut
    paintEvent? qu'est-ce? une fonction de Qt?

  13. #13
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Pas une fonction; c'est une méthode virtuelle protégée de QWidget.
    Elle est appellée à chaque fois que la fenêtre doit être redessinée, que ce soit sur demande de l'OS (par exemple suite à un agrandissement, une réduction, ou le passage d'une autre fenêtre), ou bien encore sur demande de ton programme (par exemple, avec l'appel de QWidget::update()).
    Il faut donc réimplémenter cette méthode pour que grâce au SDL_Flip, la fenêtre soit redessinée correctement tout le temps.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 82
    Par défaut
    Ah c'est bon, j'ai réimplémenté la fonction paintEvent() et l'ai appelé dans mon constructeur. Maintenant c'est bon tout fonctionne. Merci beaucoup de ton aide.

  15. #15
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Citation Envoyé par Sleeping Lionheart
    Ah c'est bon, j'ai réimplémenté la fonction paintEvent() et l'ai appelé dans mon constructeur.
    Tu ne l'as pas appelé directement? Je veux dire tu as bien appellé update()?
    D'ailleurs, tu n'as pas à l'appeller dans le constructeur. Quand la fenêtre apparaît en premier, il y a un event de généré, et donc paintEvent est appellé implicitement; donc tu devrais virer cette demande de repaint

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 82
    Par défaut
    ah ok, je vais l'enlever.
    en effet j'ai pas fait d'update(), mais jai appeler direct la fonction.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 82
    Par défaut
    Bonjour, me revoilà avec un nouveau probleme, concernant le même sujet.
    Lorsque j'inclus un PushButton par exemple dans la fenêtre (via le constructeur bien sûr) celui ci m'affiche mon boutton à la position que je veux, mais l'affiche aussi dans le coin superieur gauche(sauf que celui-ci on ne peut rien n'en faire, il ne marche pas, c'est comme une simple image).
    J'ai donc un peu reflechis et je me suis rendu compte, que comme j'ai ré-implémenté la methode paintEvent avec un SDL_Flip(), il ne rafraichis plus que les éléments SDL et plus ceux de Qt.

    Là je suis coincer, pouvez-vous m'aidez s'il vous plaît?
    Merci d'avance.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 82
    Par défaut
    up?

Discussions similaires

  1. Qt4 SDL widget transparent
    Par manpe dans le forum Qt
    Réponses: 10
    Dernier message: 14/04/2008, 13h16
  2. [SDL] manipulation d'image
    Par zdra dans le forum OpenGL
    Réponses: 4
    Dernier message: 28/02/2004, 16h56
  3. un plateau en SDL...
    Par maniaco_jazz dans le forum Autres éditeurs
    Réponses: 6
    Dernier message: 24/02/2004, 16h48
  4. [Debutant] Sdl & OpenGl link ne marche pas
    Par Riko dans le forum OpenGL
    Réponses: 9
    Dernier message: 18/02/2004, 16h13
  5. [opengl et sdl]
    Par Gonath dans le forum OpenGL
    Réponses: 6
    Dernier message: 08/12/2003, 09h49

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