Bonjour,
Je suis en train d'essayer d'intégrer SFML à Qt en suivant le tutoriel mais je me retrouve bloqué par une erreur qui me semble venir du fichier .pro mais je ne trouve pas.
Les erreurs sont les suivantes :
erreur : undefined reference to `sf::Window::Create(void*, sf::WindowSettings const&)'
erreur : undefined reference to `sf::Window::Display()'
erreur : collect2: ld returned 1 exit status
Voici ce que j'ai ajouté à mon fichier .pro
INCLUDEPATH += C:\librairies\SFML-1.6\include
LIBS += -L C:\librairies\SFML-1.6\lib -lsfml-graphics
Au cas ou je rajoute aussi mon code :
Le .h
#ifndef QSFMLCANVAS_H
#define QSFMLCANVAS_H
#include <SFML/Graphics.hpp>
#include <SFML/Graphics/RenderWindow.hpp>
#include <QWidget>
#include <QTimer>
class QSFMLCanvas : public QWidget, public sf::RenderWindow
{
Q_OBJECT
public:
explicit QSFMLCanvas(QWidget *parent = 0, const QPoint& Position = QPoint(0,0), const QSize& Size = QSize(800, 600), unsigned int FrameTime = 0);
~QSFMLCanvas();
private:
virtual void OnInit();
virtual void OnUpdate();
virtual void showEvent(QShowEvent*);
virtual void paintEvent(QPaintEvent*);
QTimer *myTimer;
bool myInitialized;
};
#endif // QSFMLCANVAS_H
Le .cpp
#include "qsfmlcanvas.h"
#ifdef Q_WS_X11
#include <Qt/qx11info_x11.h>
#include <X11/Xlib.h>
#endif
QSFMLCanvas::QSFMLCanvas(QWidget *parent, const QPoint& Position, const QSize& Size, unsigned int FrameTime) :
QWidget(parent), myInitialized (false)
{
// Mise en place de quelques options pour autoriser le rendu direct dans le widget
setAttribute(Qt::WA_PaintOnScreen);
setAttribute(Qt::WA_NoSystemBackground);
// Définition de la position et de la taille du widget
move(Position);
resize(Size);
// Préparation du timer
myTimer->setInterval(FrameTime);
}
void QSFMLCanvas::showEvent(QShowEvent*)
{
if (!myInitialized)
{
// Sous X11, il faut valider les commandes qui ont été envoyées au serveur
// afin de s'assurer que SFML aura une vision à jour de la fenêtre
#ifdef Q_WS_X11
XFlush(QX11Info::display());
#endif
// On crée la fenêtre SFML avec l'identificateur du widget
Create(winId());
// On laisse la classe dérivée s'initialiser si besoin
OnInit();
// On paramètre le timer de sorte qu'il génère un rafraîchissement à la fréquence souhaitée
connect(myTimer, SIGNAL(timeout()), this, SLOT(repaint()));
myTimer->start();
myInitialized = true;
}
}
void QSFMLCanvas::paintEvent(QPaintEvent*)
{
// On laisse la classe dérivée faire sa tambouille
OnUpdate();
// On rafraîchit le widget
Display();
}
QSFMLCanvas::~QSFMLCanvas()
{
}
Merci.