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

Auteur Sujet: [Résolu] SFML, QT et redimensionnement de la fenêtre  (Lu 2176 fois)

0 Membres et 1 Invité sur ce sujet

Raitosan

  • Full Member
  • ***
  • Messages: 221
    • Voir le profil
    • E-mail
[Résolu] SFML, QT et redimensionnement de la fenêtre
« le: Avril 17, 2015, 06:45:14 pm »
Salut à tous!

Alors voilà mon problème j'utilise le code fournis par la sfml pour faire tourner un widget avec la SFML dans une interface QT. La seul différence, c'est que j'utilise QMainWindow pour créer ma fenêtre, et mon widget SFML est au centre de la fenêtre grâce à la fonction setCentralWidget();

Le problème, c'est que quand je redimensionne ma fenêtre, le widget SFML se redimensionne aussi, mais du coup, j'ai des soucis de vue. En effet, la position de la souris n'est plus correctement détectée(elle est décalée) et le widget a l'air plus petit que ce qu'il devrait :/ Au bout d'un moment, la souris n'est même plus détectée alors qu'on est toujours dans le widget.
J'ai donc essayer de remettre ma vue à la taille du widget comme ceci:

    setView(sf::View(sf::FloatRect(0, 0, frameSize().width(), frameSize().height())));

J'ai toujours le problème de taille, qui fait que la souris n'est pas correctement détectée, par contre j'ai un effet de dézoom et de déformation :/
Ce que j'aimerais, c'est que quand on change la taille de la fenêtre, le contenu du widget ne bouge pas d'un poil, mais que la zone qu'il affiche s'adapte simplement à la nouvelle taille du widget.

Je fais ça pour un éditeur de carte, l'élément central doit permettre d'afficher la carte et de la modifier. Il faut donc que cette zone ne change pas à cause d'un redimensionnement de la fenêtre :/

Merci d'avance à tous ceux qui pourront m'aider!!

Edit: En fait, la souris est bien détectée, j'ai fais quelques testes, et j'ai pu remarquer qu'en fait le problème vient du fait la zone du widget garde en permanence la même taille. En effet, quand je redimensionne la vue, si j'ai un effet de dézoom, c'est parceque la vue augmente sa taille, mais que l'affichage du widget lui reste à la même taille. Comme si la vue était plus grande que la zone affichée :/

Edit2: Problème résolu!
Pour résoudre le problème, j'ai créer un slot WidgetSizeChanged() dans mon widget SFML qui va modifier la vue en fonction de la nouvelle taille, comme ceci:
void SFMLMap::WidgetSizeChanged()
{
    m_view.setSize(frameSize().width(), frameSize().height());
    m_view.setCenter(sf::Vector2f((float)(frameSize().width()/2.f),(float)(frameSize().height())/2.f));
    setSize(sf::Vector2u(frameSize().width(), frameSize().height()));
    setView(m_view);
}
Ensuite, dans la classe de ma fenêtre(le widget QT qui créer la fenêtre du programme), j'ai créer un signal WindowSizeChanged() qui sera émis lors du redimensionnement de la fenêtre. Ce signal est émis grâce à cette fonction:
void Window::resizeEvent ( QResizeEvent * event )
{
    emit WindowSizeChanged();
}

J'ai ensuite connecter mon slot avec mon signal comme ceci:
QObject::connect(this,SIGNAL(WindowSizeChanged()),sfml_map,SLOT(WidgetSizeChanged()));

Et voilà, grâce à ça, on peux modifier la taille de la fenêtre sans se soucier du reste :)
« Modifié: Avril 20, 2015, 12:48:39 pm par Raitosan »