| 
 | 
 
 
最新在为我的 SDL2游戏项目写一个编辑器, 想要用SDL2 画游戏画面到一个 Qt  widget上。 网上搜了很多,最终一下代码能运行,但是有 显示错误:  有个白色方块挡在sdl2 画的widget前面 下面是代码 widget.h- #ifndef WIDGET_H
 - #define WIDGET_H
 - #include <SDL2/SDL.h>
 - #include <SDL2/SDL_image.h>
 - #include <QWidget>
 - #include <QPaintEvent>
 - 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<uchar*>(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) {
 -   /* 创建一个texture */
 -   texture = SDL_CreateTextureFromSurface(render, surface);
 -   /* 清空render的内容 */
 -   SDL_RenderClear(render);
 -   /* 将texture复制到render上 */
 -   SDL_RenderCopy(render, texture, NULL, NULL);
 -   /* 将render显示到window上 */
 -   SDL_RenderPresent(render);
 - }
 
  main.cpp- #include <QApplication>
 - #include <QLayout>
 - #include <QPushButton>
 - #include "widget.h"
 - int main(int argc, char* argv[]) {
 -   QApplication app(argc, argv);
 -   QBoxLayout* layout = new QBoxLayout(QBoxLayout::TopToBottom);
 -   SDL2Widget* sdlWidget = new SDL2Widget();
 -   QPushButton* button = new QPushButton("Button");
 -   layout->addWidget(sdlWidget);
 -   layout->addWidget(button);
 -   QWidget w;
 -   w.setLayout(layout);
 -   w.show();
 -   w.resize(640, 400);
 -   return app.exec();
 - }
 
  
 
 
 |