Qt自己提供了QGraphicsView/Scene系列,但是用来做比较激烈的游戏还是有点力不从心。
由此想到了用SDL来组合QT(4.7)。
网上查了下已有的
解决方案,没能找到满意的。
,意思上合乎条件的好像就这个:
- #include <SDL/SDL.h>
- #include <QWidget>
- 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;
- };
我测试了一下,结果爆出N多错误来,首当其冲的就是main定义重复:
于是,求解将SDL放入QWidget的完美方案。