当前位置: 首页 > 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();
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • centos8以上系统安装docker环境
  • CNN代码实战
  • OpenCV图像滤波(11)中值滤波medianBlur函数的使用
  • Lora 全文翻译
  • 搭建高可用OpenStack(Queen版)集群(九)之部署nova计算节点
  • Java基础——注解
  • ThreadLocal如何解决父子线程间通信问题?(上下文传递)
  • 练习题 - 探索正则表达式re功能
  • 5 大场景上手通义灵码企业知识库 RAG
  • MQ的介绍
  • 设计模式六大原则之:单一职责原则
  • 现代物理学(3)
  • 竞争与冒险/亚稳态/跨时钟域
  • 8 个最佳 Java IDE 和文本编辑器
  • Openleyer 获取features样式
  • AWS实战 - 利用IAM对S3做访问控制
  • CSS3 变换
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaScript的使用你知道几种?(上)
  • JavaWeb(学习笔记二)
  • js中的正则表达式入门
  • Netty源码解析1-Buffer
  • Node 版本管理
  • Odoo domain写法及运用
  • PermissionScope Swift4 兼容问题
  • React+TypeScript入门
  • 分享一份非常强势的Android面试题
  • 和 || 运算
  • 回流、重绘及其优化
  • 简析gRPC client 连接管理
  • 前端存储 - localStorage
  • 十年未变!安全,谁之责?(下)
  • 使用putty远程连接linux
  • 用jquery写贪吃蛇
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • raise 与 raise ... from 的区别
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​数据链路层——流量控制可靠传输机制 ​
  • # 飞书APP集成平台-数字化落地
  • (160)时序收敛--->(10)时序收敛十
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (十五)使用Nexus创建Maven私服
  • (算法)硬币问题
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .JPG图片,各种压缩率下的文件尺寸