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

Auteur Sujet: [Résolu] [Qt5+SFML2.1] Redimensionnement du canvas SFML dans un QLayout  (Lu 3981 fois)

0 Membres et 2 Invités sur ce sujet

daijin12

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
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
« Modifié: Mai 27, 2014, 05:30:26 pm par daijin12 »

daijin12

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : [Qt5+SFML2.1] Redimensionnement du canvas SFML dans un QLayout
« Réponse #1 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.

imote

  • Newbie
  • *
  • Messages: 20
    • Voir le profil
Re : [Qt5+SFML2.1] Redimensionnement du canvas SFML dans un QLayout
« Réponse #2 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

daijin12

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : [Qt5+SFML2.1] Redimensionnement du canvas SFML dans un QLayout
« Réponse #3 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?

daijin12

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : [Qt5+SFML2.1] Redimensionnement du canvas SFML dans un QLayout
« Réponse #4 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é.

daijin12

  • Newbie
  • *
  • Messages: 16
    • Voir le profil
Re : [Qt5+SFML2.1] Redimensionnement du canvas SFML dans un QLayout
« Réponse #5 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