SDL基础使用01(QtCreator)

简介: 如何在Qt Creator中创建一个C项目并使用SDL库来创建和显示一个简单的窗口。

SDL窗口创建以及简单显示

项目创建步骤

1. 使用Qt Creator创建一个C项目

2. 将SDL库文件放到源文件目录下

在项目pro文件中添加库文件

win32{
    INCLUDEPATH += $$PWD/SDL2-2.0.10/include
	LIBS += $$PWD/SDL2-2.0.10/lib/x86/SDL2.lib
}

使用SDL创建一个窗口

#include <stdio.h>

#include <SDL.h>

#undef main    // 先取消main函数(因为SDL内部使用了main函数)
int main()
{
    // 创建一个SDL_VIDEO窗口
    SDL_Window* window = NULL;
    SDL_Init(SDL_INIT_VIDEO);
    window = SDL_CreateWindow("Title",
                              SDL_WINDOWPOS_UNDEFINED,       // 默认x y 显示到窗口中间
                              SDL_WINDOWPOS_UNDEFINED,
                              640,
                              480,
                              SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);// 设置窗口属性
    if(!window)
    {
        printf("Can't create window, err:%s\n", SDL_GetError());
        return 666;
    }

    SDL_Delay(5000);                // 延迟5000ms
    SDL_DestroyWindow(window);      // 销毁窗口
    SDL_Quit();                     // 释放资源

    return 0;
}

运行效果

SDL简单显示案例

#include <stdio.h>
#include <SDL.h>

#undef main
int main()
{
    SDL_Window* window = NULL;          // 窗口
    SDL_Renderer* renderer = NULL;      // 渲染器
    SDL_Texture* texture = NULL;        // 纹理

    SDL_Init(SDL_INIT_VIDEO);

    // 创建窗口
    window = SDL_CreateWindow("Window Title",
                              SDL_WINDOWPOS_UNDEFINED,
                              SDL_WINDOWPOS_UNDEFINED,
                              640,
                              480,
                              SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
    if(NULL == window)
    {
        printf("Create Window error: %s\n", SDL_GetError());
        return -1;
    }

    // 创建渲染器(一个窗口可有多个渲染器)
    renderer = SDL_CreateRenderer(window, -1, 0);
    if(NULL == renderer)
    {
        printf("Create Renderer error: %s\n", SDL_GetError());
        // 销毁窗口,释放资源
        SDL_DestroyWindow(window);
        SDL_Quit();
        return -1;
    }

    // 基于渲染器创建纹理
    texture = SDL_CreateTexture(renderer,
                                SDL_PIXELFORMAT_RGBA8888,
                                SDL_TEXTUREACCESS_TARGET,
                                640,
                                480);
    if(NULL == texture)
    {
        printf("Create Texture error: %s\n", SDL_GetError());
        // 销毁渲染器 窗口 释放资源
        SDL_DestroyRenderer(renderer);
        SDL_DestroyWindow(window);
        SDL_Quit();
        return -1;
    }

    int showCnt = 0;    // 显示次数
    int run = 1;        // 循环退出条件
    SDL_Rect rect;      // 定义一个SDL矩形
    rect.w = 50;
    rect.h = 50;

    while(run)
    {
        // 随机rect的位置
        rect.x = rand() % 600;
        rect.y = rand() % 400;

        // 设置渲染目标为纹理
        SDL_SetRenderTarget(renderer, texture);
        // 设置渲染绘制颜色
        SDL_SetRenderDrawColor(renderer, 255, 0, 255, 255);
        // 刷新渲染
        SDL_RenderClear(renderer);

        // 设置渲染绘制颜色
        SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);
        // 绘制矩形
        SDL_RenderDrawRect(renderer, &rect);
        // 绘制填充矩形
        SDL_RenderFillRect(renderer, &rect);

        // 恢复渲染目标为窗口
        SDL_SetRenderTarget(renderer, NULL);
        SDL_RenderCopy(renderer, texture, NULL, NULL);

        // 显示纹理
        SDL_RenderPresent(renderer);
        SDL_Delay(300);

        if(showCnt++ >= 30)
            run = 0;
    }

    // 销毁 纹理 渲染器 窗口,释放资源
    SDL_DestroyTexture(texture);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}

相关文章
|
编译器 API C语言
深入探究Qt与C++标准的兼容之旅
深入探究Qt与C++标准的兼容之旅
1718 3
|
API 计算机视觉
Qt实用技巧:自定义窗口标题栏
Qt实用技巧:自定义窗口标题栏
Qt实用技巧:自定义窗口标题栏
|
机器学习/深度学习 Web App开发 编解码
最高增强至1440p,阿里云发布端侧实时超分工具,低成本实现高画质
近日,阿里云机器学习PAI团队发布一键端侧超分工具,可实现在设备和网络带宽不变的情况下,将移动端视频分辨率提升1倍,最高可增强至1440p,将大幅提升终端用户的观看体验,该技术目前已在优酷、夸克、UC浏览器等多个APP中广泛应用。
最高增强至1440p,阿里云发布端侧实时超分工具,低成本实现高画质
SDL基础使用04(SDL_image与SDL_mixer扩展库)
本文介绍了如何使用SDL_image和SDL_mixer扩展库在SDL项目中加载和显示图片以及播放音频文件。
917 1
|
缓存 运维 监控
中间件数据传输错误处理和恢复
中间件在数据传输中至关重要,但可能出现错误。为有效处理和恢复,建议实施以下策略:1) 记录详尽的日志和异常捕获;2) 设计重试机制与降级方案;3) 自动恢复和人工干预结合;4) 实施监控告警及备份恢复策略。通过错误分析、测试验证、知识共享持续改进,提升中间件的稳定性和可靠性。
533 2
|
关系型数据库 MySQL Linux
MySQL数据库下载安装教程(Windows&Linux)
本文档详细介绍了MySQL的安装步骤,包括安装前的准备工作、下载安装包、Windows和Linux系统下的具体安装流程,以及如何配置MySQL服务、设置环境变量、启动服务和连接数据库等关键操作。
|
Windows
SDL基础使用07(YUV数据显示)
使用SDL库在Windows上处理和显示YUV数据,包括生成随机YUV数据、播放YUV文件以及实现带缩放的实时渲染。
334 1
一键自动化博客发布工具,用过的人都说好(知乎篇)
使用一键自动化博客发布工具blog-auto-publishing-tools把博客发布到知乎上。
一键自动化博客发布工具,用过的人都说好(知乎篇)
|
监控 安全 网络安全
不买服务器也可以将本地服务放到互联网(ngrok内网穿透)
不买服务器也可以将本地服务放到互联网(ngrok内网穿透)
1328 0
|
机器学习/深度学习 编解码 并行计算
深度学习的图像超分技术综述-输入单张图像(SISR)和输入多张图像的基于参考的图像(RefSR)
深度学习的图像超分技术综述-输入单张图像(SISR)和输入多张图像的基于参考的图像(RefSR)
1027 0

热门文章

最新文章