Forum de la communauté SFML
Aide => Général => Discussion démarrée par: Alundra le Mai 21, 2014, 03:13:18 pm
-
Salut,
En réalité le problème concerne tout rendu dans un "QWidget" avec QT 5.3, pas seulement SFML.
Sachant que un tutorial sur le sujet existe pour SFML alors j’espère que une réponse pourra être trouvé ici.
J'ai mis un message sur le QT-Bug report, pour le moment il a pas été analysé, sur qt-centre pas de réponse.
Le problème est que si on reimplémente "paintengine()" de "QWidget" avec juste "return NULL", il n'y a plus aucun rendu de visible, c'est comme si le widget ne faisait jamais d'update, si on reimplémente pas il y a un affichage mais un scintillement est visible.
Le problème n’était pas avec QT 5.1, depuis le passage a QT 5.3 le problème est la, je n'ai pas testé QT 5.2.
Avec espoir que une solution existe rapidement.
Merci de votre aide.
Alundra
-
Qt 5.3 est sorti hier, c'est un peu ambitieux d'espérer une réponse de notre part si le problème est effectivement présent depuis cette version uniquement... D'autant plus que le problème n'a rien à voir avec SFML.
-
D'autant plus que le problème n'a rien à voir avec SFML.
Le problème est aussi sur un QWidget avec SFML du coups cela pourrait aider des gens sur ce sujet aussi.
Mais j'avoue que la je bloque pas mal et pourtant ça se trouve une solution simple existe.
Si quelqu'un a une idée je suis preneur en tout cas.
Code : http://pastebin.com/Z6XsXdmk
Ici un log message sur chaque fonction, au lancement ca donne :
(19:58:39) paintEngine
(19:58:39) IRenderWidget
(19:58:39) showEvent
(19:58:39) resizeEvent
(19:58:39) resizeEvent
(19:58:39) resizeEvent
(19:58:39) resizeEvent
(19:58:39) resizeEvent
(19:58:39) resizeEvent
QT 5.3 ne fait aucun appel a "paintEvent" pourtant :
connect( &m_Timer, SIGNAL( timeout() ), this, SLOT( repaint() ) );
-
Problème réglé, pour link SFML a QT 5.3 il faut faire la meme chose.
Il faut link un "slot" qui contient exactement le meme code que dans le PaintEvent :
void IRenderWidget::UpdateOneFrame()
{
if( m_Initialized )
{
// Set the current render window.
DE::CEngine::GetRenderer().SetRenderWindow( m_RenderWindow );
// Update the render window widget.
OnUpdate();
// End of the rendering.
DE::CEngine::GetRenderer().EndOfRendering();
}
}
connect( &m_Timer, SIGNAL( timeout() ), this, SLOT( UpdateOneFrame() ) );