标题:把SDL2嵌入Qt,显示不完整问题
作者:taowyoo
日期:2021-03-02 04:10
内容:
最新在为我的SDL2游戏项目写一个编辑器,
想要用SDL2 画游戏画面到一个 Qt widget上。
网上搜了很多,最终一下代码能运行,但是有显示错误:

有个白色方块挡在sdl2 画的widget前面
下面是代码
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include
#include
#include
#include
class SDL2Widget : public QWidget
{
Q_OBJECT
public:
SDL2Widget(QWidget* parent=0);
~SDL2Widget();
protected:
void paintEvent(QPaintEvent* event);
private:
SDL_Window *window;
SDL_Renderer *render;
SDL_Surface *surface;
SDL_Texture *texture;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
SDL2Widget::SDL2Widget(QWidget* parent) : QWidget(parent) {
//setAttribute(Qt::WA_PaintOnScreen);
/* SDL2 */
SDL_Init(SDL_INIT_EVERYTHING);
/* 把QWidget转换为SDL_Window */
window = SDL_CreateWindowFrom((void*)this->winId());
/* SDL2 Image初始化 */
IMG_Init(IMG_INIT_JPG);
/* 加载图片,创建surface */
surface = IMG_Load("demo.jpg");
//QImage img(static_cast(surface->pixels), surface->w, surface->h,
//QImage::Format_RGB32);
/* 在window上创建一个render */
render = SDL_CreateRenderer(
window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
}
SDL2Widget::~SDL2Widget() {
SDL_DestroyTexture(texture);
SDL_DestroyRenderer(render);
}
/* 绘图操作必须在paintEvent事件里进行 */
void SDL2Widget::paintEvent(QPaintEvent* event) {
..