Моя цель — иметь возможность использовать джойстик внутри Qt (чтобы добавить задачу пилотирования в существующее приложение Qt)
Примечание: Qt 5.4 // SFML 2.2 (работает на CentOS7)
Для этого я использовал учебник на веб-сайте sfml, объясняющий, как вставить окно sfml внутри виджета Qt. Это учебник ( http://www.sfml-dev.org/tutorials/1.6/graphics-qt.php слишком стар, мне пришлось кое-что изменить, чтобы обновить его для sfml 2.2.
Однако все работает не так, как задумано, и пока он компилируется, кажется, что он не может создать окно sfml из winid и в итоге вылетает
Вот часть кода, соответствующая созданию окна:
void QSFMLCanvas::showEvent(QShowEvent*)
{
if (!myInitialized)
{
std::cout << "Bla" << std::endl;
// Under X11, we need to flush the commands sent to the server to ensure that
// SFML will get an updated view of the windows
#ifdef Q_WS_X11
XFlush(QX11Info::display());
#endif
std::cout << "Blabla" << std::endl;
// Create the SFML window with the widget handle
sf::WindowHandle HANDLE;
HANDLE = static_cast<sf::WindowHandle>(winId());
std::cout << HANDLE << std::endl;
std::cout << "Blablabla" << std::endl;
sf::RenderWindow::create(HANDLE);
std::cout << "Blablablabla" << std::endl;
// Let the derived class do its specific stuff
OnInit();
// Setup the timer to trigger a refresh at specified framerate
connect(&myTimer, SIGNAL(timeout()), this, SLOT(repaint()));
myTimer.start();
myInitialized = true;
}
}
А вот и вывод
Bla
Blabla
35651593
Blablabla
…и падение
Как вы видите, у него нет проблем с получением дескриптора окна, но он не может создать из него окно визуализации sfml.
Обратите внимание, что для дескриптора есть static_cast, которого нет в руководстве. Различные вопросы предлагали поставить reinterpret_cast, но тогда это дает мне эту ошибку
QSFMLCanvas.cpp: In member function ‘virtual void QSFMLCanvas::showEvent(QShowEvent*)’:
QSFMLCanvas.cpp:48:60: erreur: invalid cast from type ‘WId {aka long long unsigned int}’ to type ‘sf::WindowHandle {aka long unsigned int}’
HANDLE = reinterpret_cast<sf::WindowHandle>(winId());
Есть ли способ решить эту проблему? Или просто SFML & Qt обречен больше никогда не работать вместе?
Спасибо за помощь
Задача ещё не решена.