Forum de la communauté SFML

Aide => Fenêtrage => Discussion démarrée par: daijin12 le Novembre 02, 2013, 05:09:22 pm

Titre: [Résolu] [Qt5+SFML2.1] Redimensionnement du canvas SFML dans un QLayout
Posté par: daijin12 le Novembre 02, 2013, 05:09:22 pm
Bonjour à tous,

J'ai un problème dans un programme qui utilise SFML 2.1 intégré dans une interface Qt5.
J'ai placé le QSFMLCanvas dans le layout d'un QStackedWidget, lui-même inséré dans le centralwidget d'un QMainWindow :
    Sfml = new QSFMLCanvas(this);
   
    widget_container = new QStackedWidget(this);
    widget_container->addWidget(Sfml);
    widget_container->setCurrentWidget(Sfml);
    widget_container->layout()->setAlignment(widget_container,Qt::AlignCenter);
    setCentralWidget(widget_container);
 

Sous linux (Fedora 18) cela fonctionne bien, le canvas est redimensionné en même temps que le QMainWindow.

Par contre, sous Windows 7, le canvas garde ça taille initiale et se positionne en bas à gauche du QMainWindow quand on le redimensionne.

J'ai tenté de voir ce qu'il se passait en mettant des prints de la taille du QWidget et de la Renderwindow dont hérite QSFMLCanvas dans la fonction resizeEvent() du QSFMLCanvas:
void QSFMLCanvas::resizeEvent(QResizeEvent *event)
{
    std::cout << size().width() <<" " << size().height()
              <<  " " << getSize().x << " " << getSize().y <<  std::endl;
}
 

et voilà un exemple de ce que ça me donne en sortie :
815 639 700 579
815 639 700 579
825 641 700 579
825 641 700 579
835 644 700 579
835 644 700 579
842 646 700 579

La taille du RenderWindow ne varie pas alors que le QWidget et bien redimensionné.

J'ai tenté de rajouter un setSize() dans la fontion resizeEvent() mais cela ne change absolument rien.
void QSFMLCanvas::resizeEvent(QResizeEvent *event)
{
    setSize(sf::Vector2u(event->size().width(),event->size().height()));
    std::cout << size().width() <<" " << size().height()
              <<  " " << getSize().x << " " << getSize().y <<  std::endl;
}
 

Si quelqu'un a une idée pour arranger cela, cela m'aiderait beaucoup

Merci d'avance,

daijin12
Titre: Re : [Qt5+SFML2.1] Redimensionnement du canvas SFML dans un QLayout
Posté par: daijin12 le Novembre 28, 2013, 02:02:59 am
Bonjour,

Je me permets de vous relancer.
Personne n'a déjà vu ce problème et saurait comment le régler?

Ce n'est pas vraiment urgent, vu que je travaille essentiellement sous linux, mais je pense ensuite diffuser un peu mon projet.
Donc j'aimerais savoir si c'est solvable ou si je dois complètement abandonner l'intégration de SFML à Qt.
Titre: Re : [Qt5+SFML2.1] Redimensionnement du canvas SFML dans un QLayout
Posté par: imote le Novembre 30, 2013, 02:31:09 pm
Ce problème est vraiment étrange. Si j'ai bien lu et si je ne me trompe pas, ce problème est simplement du à la version Windows de Qt qui contiendrai un bogue.

Donc, il est fort probable que ce bug soit réglé dans les versions à venir de Qt. Je te propose donc de décrire ce problème dans la sections des bugs de Qt et si cela est bien avéré il sera corrigé !

Cordialement
Titre: Re : [Qt5+SFML2.1] Redimensionnement du canvas SFML dans un QLayout
Posté par: daijin12 le Novembre 30, 2013, 03:14:01 pm
Ok.
Je peux essayer ça.
Comment en déduis tu que c'est la version Windows de Qt  qui bug et pas la version Windows de SFML?
Titre: Re : [Qt5+SFML2.1] Redimensionnement du canvas SFML dans un QLayout
Posté par: daijin12 le Novembre 30, 2013, 03:21:25 pm
Je dis ça parce qu'en l'occurrence, c'est la fonction setSize() de la SFML qui ne répond pas.
La fonction resize() de Qt fonction bien, le QWIdget est bien redimensionné.
Titre: Re : [Qt5+SFML2.1] Redimensionnement du canvas SFML dans un QLayout
Posté par: daijin12 le Mai 27, 2014, 05:30:04 pm
Bonjour,

J'ai finalement réussi à résoudre ça en mettant SFML à jour depuis le dépôt git.

Cependant il faut toujours réimpléménter la fonction resizeEvent() :
void QSFMLCanvas::resizeEvent(QResizeEvent *event)
{
    setSize(sf::Vector2u(event->size().width(),event->size().height()));
 
}
 

Maintenant tout fonctionne bien pour Fedora et Windows