Welcome, Guest. Please login or register. Did you miss your activation email?

Author Topic: [Résolu] [Qt5+SFML2.1] Redimensionnement du canvas SFML dans un QLayout  (Read 4622 times)

0 Members and 1 Guest are viewing this topic.

daijin12

  • Newbie
  • *
  • Posts: 16
    • View Profile
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
« Last Edit: May 27, 2014, 05:30:26 pm by daijin12 »

daijin12

  • Newbie
  • *
  • Posts: 16
    • View Profile
Re : [Qt5+SFML2.1] Redimensionnement du canvas SFML dans un QLayout
« Reply #1 on: November 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
  • *
  • Posts: 20
    • View Profile
Re : [Qt5+SFML2.1] Redimensionnement du canvas SFML dans un QLayout
« Reply #2 on: November 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
  • *
  • Posts: 16
    • View Profile
Re : [Qt5+SFML2.1] Redimensionnement du canvas SFML dans un QLayout
« Reply #3 on: November 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
  • *
  • Posts: 16
    • View Profile
Re : [Qt5+SFML2.1] Redimensionnement du canvas SFML dans un QLayout
« Reply #4 on: November 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
  • *
  • Posts: 16
    • View Profile
Re : [Qt5+SFML2.1] Redimensionnement du canvas SFML dans un QLayout
« Reply #5 on: May 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

 

anything