How do I use Qt and SDL together?

后端 未结 3 1128
北恋
北恋 2020-12-08 04:44

I am building a physics simulation engine and editor in Windows. I want to build the editor part using Qt and I want to run the engine using SDL with OpenGL.

My firs

3条回答
  •  忘掉有多难
    2020-12-08 05:21

    This is a simplification of what I do in my project. You can use it just like an ordinary widget, but as you need, you can using it's m_Screen object to draw to the SDL surface and it'll show in the widget :)

    #include "SDL.h"
    #include 
    
    class SDLVideo : public QWidget {
        Q_OBJECT
    
    public:
        SDLVideo(QWidget *parent = 0, Qt::WindowFlags f = 0) : QWidget(parent, f), m_Screen(0){
            setAttribute(Qt::WA_PaintOnScreen);
            setUpdatesEnabled(false);
    
            // Set the new video mode with the new window size
            char variable[64];
            snprintf(variable, sizeof(variable), "SDL_WINDOWID=0x%lx", winId());
            putenv(variable);
    
            SDL_InitSubSystem(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE);
    
            // initialize default Video
            if((SDL_Init(SDL_INIT_VIDEO) == -1)) {
                std:cerr << "Could not initialize SDL: " << SDL_GetError() << std::endl;
            }
    
            m_Screen = SDL_SetVideoMode(640, 480, 8, SDL_HWSURFACE | SDL_DOUBLEBUF);
            if (m_Screen == 0) {
                std::cerr << "Couldn't set video mode: " << SDL_GetError() << std::endl;
            }
        }
    
        virtual ~SDLVideo() {
            if(SDL_WasInit(SDL_INIT_VIDEO) != 0) {
                SDL_QuitSubSystem(SDL_INIT_VIDEO);
                m_Screen = 0;
            }
        }
    private:
        SDL_Surface *m_Screen;
    };
    

    Hope this helps

    Note: It usually makes sense to set both the min and max size of this widget to the SDL surface size.

提交回复
热议问题