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

Auteur Sujet: Plantage au lancement du programme + QSFMLCanvas  (Lu 1468 fois)

0 Membres et 1 Invité sur ce sujet

Firexcaliburn

  • Newbie
  • *
  • Messages: 2
    • Voir le profil
Plantage au lancement du programme + QSFMLCanvas
« le: Avril 24, 2013, 08:15:38 pm »
Salut,
J'ai utilisé Qt 5.0.2, SFML-2.0-rc-windows-32-gcc4-sjlj, et QtCreator. Mais, lorsque j'ai voulu lancer l'exécutable, j'ai eu une fenêtre blanche suivie d'un plantage disant que le programme avait cessé de fonctionner.  Voici le code du programme :
main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QFrame>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

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

    MainWindow w(MainFrame, QPoint(20, 20), QSize(360, 360));
    w.show();
   
    return a.exec();
}

 

mainwindow.cpp :
#include "mainwindow.h"

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

MainWindow::~MainWindow()
{
}

void MainWindow::OnInit()
{
    //texte = sf::Text("Bonjour");
}

void MainWindow::OnUpdate()
{
    /*sf::Event event;
    while(pollEvent(event))
    {

    }
    clear(sf::Color(255, 0, 0));*/


    //draw(texte);
}

 

mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QSFMLCanvas.h>

class MainWindow : public QSFMLCanvas
{
    Q_OBJECT
   
public:
    MainWindow(QWidget* Parent, const QPoint& Position, const QSize& Size);
    ~MainWindow();

private:
    //sf::Text texte;
    void OnInit();
    void OnUpdate();
};

#endif // MAINWINDOW_H

 

Le programme utilise une bibliothèque externe contenant la classe QSFMLCanvas entièrement copiée collée du tutoriel sauf une ligne à cause de laquelle la compilation de la bibliothèque ne fonctionnait pas :
sf::Window::create(winId()); // compilation impossible (erreur de conversion)
sf::Window::create((sf::WindowHandle)winId()); // compilation possible
 

J'aimerais savoir d'où vient l'erreur et comment la corriger.
Merci d'avance !

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Plantage au lancement du programme + QSFMLCanvas
« Réponse #1 le: Avril 24, 2013, 09:28:30 pm »
Il faut recompiler SFML.
Laurent Gomila - SFML developer

Firexcaliburn

  • Newbie
  • *
  • Messages: 2
    • Voir le profil
Re : Plantage au lancement du programme + QSFMLCanvas
« Réponse #2 le: Avril 25, 2013, 01:29:03 pm »
Le problème venait d'une mise à jour récursive de la surface, comme si la fonction paintEvent(QPaintEvent*) appelait repaint() tout le temps, alors que ce n'était pas le cas. J'ai donc essayé de multiples façons de déclarer/dessiner le sf::Text. J'ai fini par trouver la solution :
void WidgetCanvas::OnUpdate()
{
    static sf::Text texte(sf::String("texte"), font);
    clear(sf::Color(0, 255, 0));
    sf::Event event;
    while(pollEvent(event))
    {

    }

    draw(texte);
}
 
Il fallait déclarer le sf::Text en statique dans la fonction OnUpdate().

EDIT : J'ai recompilé la sfml pour faire ces tests
« Modifié: Avril 25, 2013, 01:31:48 pm par Firexcaliburn »

 

anything