這是我在我的項目中做的簡化。您可以使用它就像一個普通的小部件,但你有需要,你可以用它m_Screen對象提請SDL的表面,它會在widget :)
#include "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;
};
希望這有助於
顯示
注意:通常將此小部件的最小和最大大小都設置爲SDL表面大小是有意義的。
這對於我開始,現在一個開源項目。隨着項目的進展,我會發布我的架構/解決方案。 – bineteri 2008-09-23 01:43:47
基於你想完成的任務,我相信你可以直接去Qt並完全轉儲SDL。 Qt具有良好的OpenGL支持,提供輸入處理,更好(沒有攻擊,SDL人員)用戶界面功能等。使用OpenGL Qt小部件是微不足道的,Qt框架提供的線程模型也非常易於使用(您具有標準線程,併發等+信號/時隙概念)。如果線程模型不符合你的喜好,你可以使用類似boost的東西。無論哪種方式,我真的沒有看到在您的方案中使用SDL + Qt的理由。 – rbaleksandar 2015-10-30 23:28:17