当前位置: 首页 > news >正文

qt工程中调用sdl的流程

配置 Qt 工程

在你的 Qt 工程中,需要对项目文件(.pro 文件)进行配置,以包含 SDL 库的路径和链接选项。

# Qt Project File (.pro)# 设置 SDL 库的路径
INCLUDEPATH += /path/to/SDL/include
LIBS += -L/path/to/SDL/lib -lSDL2

初始化 SDL

在 Qt 的主函数中,确保 SDL 库的初始化在 Qt 的 QApplication 对象创建之前进行:

#include <QApplication>
#include <SDL.h>int main(int argc, char *argv[])
{// 初始化 SDLif (SDL_Init(SDL_INIT_VIDEO) < 0) {// SDL 初始化失败,处理错误return -1;}// 创建 Qt 应用程序QApplication app(argc, argv);// 你的 Qt 代码// 退出 SDLSDL_Quit();return app.exec();
}

调用 SDL

#include <QApplication>
#include <QWidget>
#include <SDL.h>class SDLWidget : public QWidget
{
public:SDLWidget(QWidget *parent = nullptr) : QWidget(parent) {// 初始化 SDLif (SDL_Init(SDL_INIT_VIDEO) < 0) {qWarning("SDL_Init Error: %s", SDL_GetError());return;}// 创建 SDL 窗口sdlWindow = SDL_CreateWindowFrom((void*)this->winId());if (!sdlWindow) {qWarning("SDL_CreateWindowFrom Error: %s", SDL_GetError());return;}// 创建 SDL 渲染器sdlRenderer = SDL_CreateRenderer(sdlWindow, -1, SDL_RENDERER_ACCELERATED);if (!sdlRenderer) {qWarning("SDL_CreateRenderer Error: %s", SDL_GetError());return;}// 渲染示例SDL_SetRenderDrawColor(sdlRenderer, 255, 0, 0, 255);SDL_RenderClear(sdlRenderer);SDL_RenderPresent(sdlRenderer);}~SDLWidget() {// 清理 SDL 资源if (sdlRenderer) {SDL_DestroyRenderer(sdlRenderer);}if (sdlWindow) {SDL_DestroyWindow(sdlWindow);}SDL_Quit();}private:SDL_Window* sdlWindow;SDL_Renderer* sdlRenderer;
};int main(int argc, char *argv[])
{QApplication app(argc, argv);SDLWidget widget;widget.show();return app.exec();
}

处理 SDL 和 Qt 事件

SDL 和 Qt 的事件处理机制是分开的,需要处理两者之间的交互。例如,如果你在 SDL 中处理输入事件。

#include <QApplication>
#include <QWidget>
#include <SDL.h>class SDLWidget : public QWidget
{
public:SDLWidget(QWidget *parent = nullptr) : QWidget(parent) {// 初始化 SDLif (SDL_Init(SDL_INIT_VIDEO) < 0) {qWarning("SDL_Init Error: %s", SDL_GetError());return;}// 创建 SDL 窗口sdlWindow = SDL_CreateWindowFrom((void*)this->winId());if (!sdlWindow) {qWarning("SDL_CreateWindowFrom Error: %s", SDL_GetError());return;}// 创建 SDL 渲染器sdlRenderer = SDL_CreateRenderer(sdlWindow, -1, SDL_RENDERER_ACCELERATED);if (!sdlRenderer) {qWarning("SDL_CreateRenderer Error: %s", SDL_GetError());return;}}~SDLWidget() {if (sdlRenderer) {SDL_DestroyRenderer(sdlRenderer);}if (sdlWindow) {SDL_DestroyWindow(sdlWindow);}SDL_Quit();}protected:void paintEvent(QPaintEvent *event) override {// 在 Qt 的 paintEvent 中调用 SDL 渲染SDL_SetRenderDrawColor(sdlRenderer, 0, 255, 0, 255);SDL_RenderClear(sdlRenderer);SDL_RenderPresent(sdlRenderer);}private:SDL_Window* sdlWindow;SDL_Renderer* sdlRenderer;
};int main(int argc, char *argv[])
{QApplication app(argc, argv);SDLWidget widget;widget.show();return app.exec();
}

http://www.lryc.cn/news/425031.html

相关文章:

  • ECMAScript性能优化技巧与陷阱
  • c++实现B树(上)
  • 【机器学习】深度强化学习–RL的基本概念、经典场景以及算法分类
  • 【git】将本地文件上传到github
  • 安卓应用开发学习:手机摇一摇功能应用尝试--摇骰子和摇红包
  • HTML中的<fieldset>标签元素框的使用
  • Linux驱动入门实验班——SR501红外模块驱动(附百问网视频链接)
  • windows C++- Com技术简介(上)
  • Jenkins持续集成工具学习
  • Redis:查询是否包含某个字符/字符串之三
  • 【Redis】数据类型详解及其应用场景
  • PARA-Drive:设计并行模型实现端到端自动驾驶
  • vs2022 x64 C/C++和汇编混编 遇到的坑
  • PHP概述、环境搭建与基本语法讲解
  • 实现信创Linux麦克风摄像头录制(源码,银河麒麟、统信UOS)
  • 深度学习9--目标检测
  • 第131天:内网安全-横向移动Kerberos 攻击SPN扫描WinRMWinRSRDP
  • 微信小程序的四种弹窗使用
  • 我的第一个CUDA程序
  • workerman下的webman路由浏览器跨域的一种问题
  • Windows11 -MASKRCNN-部署测试
  • 函数(子程序)的常见、易混淆概念详解【对初学者有帮助】
  • TiDB-从0到1-DM工具
  • AppScan——Web 应用安全扫描的得力工具
  • 虚幻5|AI行为树,进阶篇
  • 在 Spring Boot 中配置 Tomcat 监听多个端口
  • stm32f407新建项目工程及烧录
  • c++中加不加const的值传递和引用传递的区别
  • Qt的窗口设置
  • 51单片机-LCD1602显示屏