Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Qt et SFML] [Lion] les faire cohabiter sur MacOSX Lion  (Lu 4364 fois)

0 Membres et 1 Invité sur ce sujet

Leboucetmistère

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
[Qt et SFML] [Lion] les faire cohabiter sur MacOSX Lion
« le: Juin 03, 2012, 12:29:20 pm »
Bonjour
Depuis peu j'essaye de faire cohabiter la sfml avec Qt sur mon mac (Lion 10.7)
J'ai donc installé SFML 2.0 et Qt connait les chemins d'inclusion mais lorsque je compile le code test donné dans le tuto présent sur ce site il y a une erreur (je ne pense pas qu'elle vienne d'une mauvaise inclusion ou d'un mauvais lainage car Qt connais la Sfml et les fonctions membres)
Voici l'erreur, elle se situe dans le fichier QSFMLCanvas.cpp à la ligne suivante :
Create(winId());
dans la fonction
void QSFMLCanvas::showEvent(QShowEvent*)
{
    if (!myInitialized)
    {
        // Under X11, we need to flush the commands sent to the server to ensure that
        // SFML will get an updated view of the windows
        #ifdef Q_WS_X11
            XFlush(QX11Info::display());
        #endif

        // Create the SFML window with the widget handle
        Create(winId());

        // Let the derived class do its specific stuff
        OnInit();

        // Setup the timer to trigger a refresh at specified framerate
        connect(&myTimer, SIGNAL(timeout()), this, SLOT(repaint()));
        myTimer.start();

        myInitialized = true;
    }
}

Et l'erreur est la suivante :

Citer
/Users/depassearthur/Documents/Programmation/Test_SFML_et_Qt-build-desktop-Qt_4_8_0_dans_le_PATH__Syst_me__Debug/../Test_SFML_et_Qt/QSFMLCanvas.cpp:91: erreur : invalid conversion from 'WId' to 'void*'
/Users/depassearthur/Documents/Programmation/Test_SFML_et_Qt-build-desktop-Qt_4_8_0_dans_le_PATH__Syst_me__Debug/../Test_SFML_et_Qt/QSFMLCanvas.cpp:91: error:   initializing argument 1 of 'void sf::Window::Create(void*, const sf::ContextSettings&)'

Si qqn sait d'où ça peut bien venir ;) je suis preneur :)
Pas besoin de Dieux j'ai la SFML ça me suffit :)

Ceylo

  • Hero Member
  • *****
  • Messages: 2325
    • Voir le profil
    • http://sfemovie.yalir.org/
    • E-mail
Re : [Qt et SFML] [Lion] les faire cohabiter sur MacOSX Lion
« Réponse #1 le: Juin 03, 2012, 01:08:41 pm »
Create(static_cast<void *>(winId()));Ça devrait faire ton affaire.
Want to play movies in your SFML application? Check out sfeMovie!

Leboucetmistère

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
Re : [Qt et SFML] [Lion] les faire cohabiter sur MacOSX Lion
« Réponse #2 le: Juin 03, 2012, 02:34:11 pm »
Désolé mais ta solution ne fonctionne pas :(
voici le code
void QSFMLCanvas::showEvent(QShowEvent*)
{
    if (!myInitialized)
    {
        // Under X11, we need to flush the commands sent to the server to ensure that
        // SFML will get an updated view of the windows
        #ifdef Q_WS_X11
            XFlush(QX11Info::display());
        #endif

        // Create the SFML window with the widget handle
        Create(static_cast<void *>(winId()));

        // Let the derived class do its specific stuff
        OnInit();

        // Setup the timer to trigger a refresh at specified framerate
        connect(&myTimer, SIGNAL(timeout()), this, SLOT(repaint()));
        myTimer.start();

        myInitialized = true;
    }
}

et le compilo me dit :

Citer
/Users/depassearthur/Documents/Programmation/Test_SFML_et_Qt-build-desktop-Qt_4_8_0_dans_le_PATH__Syst_me__Debug/../Test_SFML_et_Qt/QSFMLCanvas.cpp:91: erreur : invalid static_cast from type 'WId' to type 'void*'

L'erreur vient peut être de l'utilisation d'un élément Win(daube) sur un système osX ?? ....
« Modifié: Juin 03, 2012, 02:36:01 pm par Leboucetmistère »
Pas besoin de Dieux j'ai la SFML ça me suffit :)

Ceylo

  • Hero Member
  • *****
  • Messages: 2325
    • Voir le profil
    • http://sfemovie.yalir.org/
    • E-mail
Re : [Qt et SFML] [Lion] les faire cohabiter sur MacOSX Lion
« Réponse #3 le: Juin 03, 2012, 02:36:52 pm »
Hmm... j'aurais tendance à dire que t'es en 64 bits, que le pointeur est sur 8 octets, alors que l'entier est sur 4 octets, donc il veut pas faire le transtypage.

Conclusion : faut voir avec Laurent :D .
Want to play movies in your SFML application? Check out sfeMovie!

Leboucetmistère

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
Re : [Qt et SFML] [Lion] les faire cohabiter sur MacOSX Lion
« Réponse #4 le: Juin 03, 2012, 02:43:49 pm »
En effet je tourne sur du 64 bits --" j'espère qu'il y a une solution envisageable .....
Je vais envoyer un mp à Laurent pour qu'il jette un coup d'oeil :)
Pas besoin de Dieux j'ai la SFML ça me suffit :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [Qt et SFML] [Lion] les faire cohabiter sur MacOSX Lion
« Réponse #5 le: Juin 03, 2012, 04:38:08 pm »
En fait il faut demander à Hiura. J'ai aucune idée de quel type utilise Cocoa pour les handles de fenêtres.
Laurent Gomila - SFML developer

Hiura

  • SFML Team
  • Hero Member
  • *****
  • Messages: 4321
    • Voir le profil
    • E-mail
Re : [Qt et SFML] [Lion] les faire cohabiter sur MacOSX Lion
« Réponse #6 le: Juin 03, 2012, 07:34:11 pm »
Le handle doit être passé comme un void* qui est en réalité soit un NSWindow* soit un NSView*. Si le handle passé n'est pas d'un de ces deux types, tu auras une erreur à l'execution.

Maintenant, d'après la documentation de Qt, Create(static_cast<void *>(winId())); devrait fonctionner. L'erreur que tu obtiens est un peu troublante car la doc spécifie bien que winId() est un NSWindow*. Mais en même temps, ici la doc est très lacunaire.

Pourrais-tu me donner la vraie définition de WId ? Dans Xcode tu peux faire cmd+clic sur le typedef pour voir la définition il me semble. (Je peux pas le faire moi même comme j'ai pas installé Qt.)

Tu peux éventuellement essayer Create((void *)winId()); à tout hasard.
SFML / OS X developer

Leboucetmistère

  • Newbie
  • *
  • Messages: 29
    • Voir le profil
Re : [Qt et SFML] [Lion] les faire cohabiter sur MacOSX Lion
« Réponse #7 le: Juin 03, 2012, 07:40:30 pm »
voila :
La définition de WinId se trouve ici :
Citer
// Window system dependent definitions

#if defined(Q_WS_MAC) && !defined(Q_WS_QWS)

#include <QtGui/qmacdefines_mac.h>

#ifdef Q_WS_MAC32
typedef int WId;
#else
typedef long WId;
#endif

#endif // Q_WS_MAC

#if defined(Q_WS_WIN)
#include <QtGui/qwindowdefs_win.h>
#endif // Q_WS_WIN

#if defined(Q_WS_X11)

typedef struct _XDisplay Display;
typedef union  _XEvent XEvent;
typedef struct _XGC *GC;
typedef struct _XRegion *Region;
typedef unsigned long  WId;

#endif // Q_WS_X11

#if defined(Q_WS_QWS)

typedef unsigned long  WId;
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
struct QWSEvent;
QT_END_NAMESPACE
QT_END_HEADER

#endif // Q_WS_QWS

#if defined(Q_WS_QPA)

typedef unsigned long  WId;

#endif // Q_WS_QPA

#if defined(Q_OS_SYMBIAN)
class CCoeControl;
typedef CCoeControl * WId;
#endif // Q_OS_SYMBIAN

c'est le typedef WId

Je vais essayer la méthode que tu me propose pour voir et je vous redis ;)



EDIT : la méthode que tu propose fonctionne :) merci beaucoup, il ne me reste plus qu'à adapter le code à la SFML 2.0 ;)
Merci à tous :) je passe résolu
« Modifié: Juin 03, 2012, 07:42:25 pm par Leboucetmistère »
Pas besoin de Dieux j'ai la SFML ça me suffit :)

Hiura

  • SFML Team
  • Hero Member
  • *****
  • Messages: 4321
    • Voir le profil
    • E-mail
Re : [Qt et SFML] [Lion] les faire cohabiter sur MacOSX Lion
« Réponse #8 le: Juin 03, 2012, 08:27:41 pm »
Ha, super!

En même temps, pourquoi ont-ils fait un typedef vers un entier ?  ??? bref... je note ça pour les futures questions sur le sujet.
SFML / OS X developer