• 5038阅读
  • 1回复

Qt & SDL [复制链接]

上一主题 下一主题
离线mewjerry
 
只看楼主 倒序阅读 楼主  发表于: 2010-10-24
— 本帖被 XChinux 执行加亮操作(2010-10-24) —
Qt自己提供了QGraphicsView/Scene系列,但是用来做比较激烈的游戏还是有点力不从心。

由此想到了用SDL来组合QT(4.7)。

网上查了下已有的解决方案,没能找到满意的。
,意思上合乎条件的好像就这个:
  1. #include <SDL/SDL.h>
  2. #include <QWidget>
  3. class SDLVideo : public QWidget {
  4.     Q_OBJECT
  5. public:
  6.     SDLVideo(QWidget *parent = 0, Qt::WindowFlags f = 0) : QWidget(parent, f), m_Screen(0){
  7.         setAttribute(Qt::WA_PaintOnScreen);
  8.         setUpdatesEnabled(false);
  9.         // Set the new video mode with the new window size
  10.         char variable[64];
  11.         snprintf(variable, sizeof(variable), "SDL_WINDOWID=0x%lx", winId());
  12.         putenv(variable);
  13.         SDL_InitSubSystem(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE);
  14.         // initialize default Video
  15.         if((SDL_Init(SDL_INIT_VIDEO) == -1)) {
  16.                 std:cerr << "Could not initialize SDL: " << SDL_GetError() << std::endl;
  17.         }
  18.         m_Screen = SDL_SetVideoMode(640, 480, 8, SDL_HWSURFACE | SDL_DOUBLEBUF);
  19.         if (m_Screen == 0) {
  20.                 std::cerr << "Couldn't set video mode: " << SDL_GetError() << std::endl;
  21.         }
  22.     }
  23.     virtual ~SDLVideo() {
  24.         if(SDL_WasInit(SDL_INIT_VIDEO) != 0) {
  25.                 SDL_QuitSubSystem(SDL_INIT_VIDEO);
  26.                 m_Screen = 0;
  27.         }
  28.     }
  29. private:
  30.     SDL_Surface *m_Screen;
  31. };


我测试了一下,结果爆出N多错误来,首当其冲的就是main定义重复:


于是,求解将SDL放入QWidget的完美方案。
离线lhca
只看该作者 1楼 发表于: 2010-10-26
main这个问题网上早就有解决方法了。
快速回复
限100 字节
 
上一个 下一个