Bonjour,
je n'est pas mis tous le code, j'ai déjà une application QT et une fenêtre QT, sinon ça compilerais pas et la fenêtre QFileDialog::getOpenFileName ne fonctionnerais pas de temps en temps je pense.
Je pense que je ne comprend pas la boucle event de QT.
Je pense que la fenetre QFileDialog::getOpenFileName s'ouvre et attend un event QT qu'il ne vois jamais a cause de la boucle while de SFML mais je ne comprend pas pourquoi certaine fois ça fonctionne.
Une chose intéressante est que les events SFML fonctionne quand la fenêtre QFileDialog::getOpenFileName est figé, je peut appuyé sur le bouton "echap" ce qui permet de revenir à l'affichage normal en fonctionnement normal mais sans sortir de l'application.
Je met le code entier.
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFileDialog>
#include <SFML/Graphics.hpp>
#include <iostream>
namespace Ui
{
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.h
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
// Creation d'une fenêtre plein écran avec le mode vidéo du bureau
sf::VideoMode DesktopMode = sf::VideoMode::getDesktopMode();
//je creer la fenetre de l'application
sf::RenderWindow window(DesktopMode, "fenetre test", sf::Style::None, sf::ContextSettings(32));
window.setVerticalSyncEnabled(true);
sf::Texture texture;
sf::Sprite sprite;
if (!texture.loadFromFile("c:\\test.png"))
{
std::cout << "Error loading file !" << std::endl;
}
sprite.setTexture(texture);
std::cout << "Start" << std::endl;
// la boucle principale
bool running = true;
while (running)
{
// évènements
sf::Event event;
while (window.pollEvent(event))
{
//touche echape ou fermeture fenetre
if ((event.type == sf::Event::Closed) || ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape)))
{
// on stoppe le programme
running = false;
}
//si click gauche
if ((event.type == sf::Event::MouseButtonPressed) && (event.mouseButton.button == sf::Mouse::Left))
{
//je verifie si la souris est sur le sprite
if((sprite.getPosition().x < event.mouseButton.x) && (event.mouseButton.x < (sprite.getPosition().x + sprite.getGlobalBounds().width))&&
(sprite.getPosition().y < event.mouseButton.y) && (event.mouseButton.y < (sprite.getPosition().y + sprite.getGlobalBounds().height)))
{
QString fileName = QFileDialog::getOpenFileName(0,"Open File",QString(),"BMP File(*.BMP)");
std::cout << "chouette" << std::endl;
}
}
}
window.clear(sf::Color::Black);
window.draw(sprite);
window.display();
}
}
MainWindow::~MainWindow()
{
//delete ui;
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
merci