为什么 QT 程序在 SDL 启动时崩溃 (C4Droid)

Why does QT program crash upon SDL startup (C4Droid)

提问人:K. Russell Smith 提问时间:10/13/2023 更新时间:10/13/2023 访问量:27

问:

我正在尝试将我编写的 SDL2 游戏封装在 QT 应用程序中,用于 GUI 控件;我正在遵循 GitHub 的一个例子,但它崩溃了。我减少了它,发现SDL_Init导致了这种情况。由于我无法在 C4Droid 上看到控制台输出,因此我对此进行调试的能力有限。下面是最小的示例:

main.cpp:

#include <QApplication>
#include <SDL2/SDL.h>

#include "SDLWin.hpp"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    
    if(SDL_Init(SDL_INIT_VIDEO) <  0)
    {
        printf("SDL failed to initialize: %s\n", SDL_GetError());
    }
    
    SDLWin win;
    win.show();
    
    int retval = app.exec();
    
    SDL_Quit();
    
    return retval;
}

SDLWin 类现在是一个微不足道的 shell,作为通用的 QMainWindow 提供服务,因为简单地初始化 SDL 就是导致崩溃的原因。

SDLWin.hpp:

#ifndef SDLWIN_HPP
#define SDLWIN_HPP

#include <QMainWindow>
#include <QWidget>


class SDLWin : public QMainWindow
{
    Q_OBJECT
public:
    
    SDLWin();
    ~SDLWin();
    
    void SDLInit();
private:
    QWidget      *main_win;
};

#endif

SDLWin.cpp:

#include "SDLWin.hpp"
#include <QWidget>

SDLWin::SDLWin() : main_win(new QWidget)
{
    setWindowTitle("tetris");
    setCentralWidget(main_win);
}
SDLWin::~SDLWin()
{}

application.pro:

QT += core uitools widgets gui

HEADERS       = ./src/SDLWin.hpp
SOURCES       = ./src/main.cpp \
                ./src/SDLWin.cpp

MOC_DIR       = ./src/moc
OBJECTS_DIR   = ./src/objects
RCC_DIR       = ./src/resource

LIBS += -lSDL2main \
        -lSDL2 \
        -lSDL2_image \
        -lSDL2_ttf \
        -lSDL2_mixer

#! [0]
RESOURCES     = application.qrc
#! [0]

# install
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/mainwindows/application
INSTALLS += target

simulator: warning(This example might not fully work on Simulator platform)
C++ QT SDL-2

评论


答: 暂无答案