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的完美方案。