Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Toxicat

Pages: [1]
1
Général / Re : [SFML2.1 / Qt4.8.5] SFML dans un widget
« le: Mars 24, 2014, 10:21:32 pm »
Le problème vient de cette ligne là:

QWidget::create(winId());

Il faut tout simplement écrire:

sf::RenderWindow::create(winId());

2
Général / Re : [SFML2.1 / Qt4.8.5] SFML dans un widget
« le: Mars 23, 2014, 10:44:43 am »
Aha, j'ai trouvé !

Si Laurent passe par là, qu'il sache que je suis disposé à mettre à jour le tuto et/ou en faire un sur le wiki.

3
Général / Re : [SFML2.1 / Qt4.8.5] SFML dans un widget
« le: Mars 21, 2014, 02:04:12 pm »
Voilà, voilà, j'ai édité le premier message ^^

Malheureusement, dans le cadre de ce projet, je suis obligé d'utiliser Qt (pour gérer ma fenêtre) et faire du Java, même pour de la GUI, ne m'intéresse absolument pas =)

4
Général / [SFML2.1 / Qt4.8.5] SFML dans un widget
« le: Mars 21, 2014, 12:29:32 am »
Bonjour, bonjour,

Après avoir suivis le tuto suivant : http://sfml-dev.org/tutorials/1.6/graphics-qt-fr.php et avoir corrigé les deux trois petites choses propres à SFML2.1 (Image -> Texture, GetFrameTime, etc), je me retrouve bien embêté.

En effet, rien de s'affiche dans ma fenêtre. Mais genre rien, le vide, le blanc, le néant, je dirais même plus un (void *)NULL !

Après avoir collé des messages de debug partout, je constate que paintEvent n'est jamais appelé (et donc par extension, la surcharge de Update et le display du widget.

Je précise que je n'ai ni warning, ni erreur à la compilation. Les dll sont au bon endroit.

Alors Laurent, est ce que j'ai mal compris le rituel d’invocation de la SFML ? =D

Comme indiqué dans le titre j'utilise la dernière version de la SFML et la QtLib en version 4.8.5. Mon IDE est VS2012 Update 4 et je suis sous Win8.1x64 (avec une CG Ati, si jamais ça à une importance).

EDIT:
QSFMLCanvas.cpp
#ifdef Q_WS_X11
    #include <Qt/qx11info_x11.h>
    #include <X11/Xlib.h>
#endif

#include <iostream>

#include "QSFMLCanvas.hpp"

QSFMLCanvas::QSFMLCanvas(QWidget* Parent, const QPoint& Position, const QSize& Size, unsigned int FrameTime) :
QWidget       (Parent),
myInitialized (false)
{
    setAttribute(Qt::WA_PaintOnScreen);
    setAttribute(Qt::WA_OpaquePaintEvent);
    setAttribute(Qt::WA_NoSystemBackground);

    setFocusPolicy(Qt::StrongFocus);

    move(Position);
    resize(Size);

    myTimer.setInterval(FrameTime);
}

void QSFMLCanvas::showEvent(QShowEvent*)
{
    std::cout << "showEvent" << std::endl;
    if (!myInitialized)
    {
        std::cout << "init" << std::endl;
        #ifdef Q_WS_X11
            XFlush(QX11Info::display());
        #endif

        QWidget::create(winId());

        OnInit();

        connect(&myTimer, SIGNAL(timeout()), this, SLOT(repaint()));
        myTimer.start();

        myInitialized = true;
    }
}

QPaintEngine* QSFMLCanvas::paintEngine() const
{
    return 0;
}

void QSFMLCanvas::paintEvent(QPaintEvent*)
{
    std::cout << "paint" << std::endl;
    OnUpdate();

    display();
}

QSFMLCanvas.hpp
#pragma once
#include <SFML/Graphics.hpp>
#include <Qt/qwidget.h>
#include <Qt/qtimer.h>

class QSFMLCanvas : public QWidget, public sf::RenderWindow
{
public :

    QSFMLCanvas(QWidget* Parent, const QPoint& Position, const QSize& Size, unsigned int FrameTime = 0);

    virtual ~QSFMLCanvas() {};

private :

    virtual void OnInit() = 0;

    virtual void OnUpdate() = 0;

    virtual QPaintEngine* paintEngine() const;

    virtual void showEvent(QShowEvent*);

    virtual void paintEvent(QPaintEvent*);

    QTimer myTimer;
    bool   myInitialized;
};

MyCanvas.hpp
#include <iostream>

#include "QSFMLCanvas.hpp"

class MyCanvas : public QSFMLCanvas
{
public :

    MyCanvas(QWidget* Parent, const QPoint& Position, const QSize& Size) :
    QSFMLCanvas(Parent, Position, Size)
    {
    }

    ~MyCanvas(void) {}

private :

    void OnInit()
    {
        texture.loadFromFile("logo.png");
        mySprite.setTexture(texture);
    }

    void OnUpdate()
    {
        std::cout << "update" << std::endl;

        clear(sf::Color(0, 128, 0));

        mySprite.rotate(1);

        draw(mySprite);
    }

    sf::Texture texture;
    sf::Sprite mySprite;
};

main.cpp
#include <Qt\qapplication.h>
#include <Qt\qframe.h>

#include "MyCanvas.hpp"

int main(int argc, char **argv)
{
    QApplication App(argc, argv);

    QFrame* MainFrame = new QFrame;
    MainFrame->setWindowTitle("Qt SFML");
    MainFrame->resize(400, 400);
    MainFrame->show();

    MyCanvas* SFMLView = new MyCanvas(MainFrame, QPoint(20, 20), QSize(360, 360));
    SFMLView->show();

    return App.exec();
}
 

5
Général / Re : [Débutant] undefined reference to
« le: Mars 21, 2014, 12:11:30 am »
De ce que j'en vois, tu as du oublier de linker les lib (fichier en .so) Quelle est ta ligne de compilation et/ou ton Makefile ?

Pages: [1]