小编Sco*_*ott的帖子

SDL将图像嵌入程序可执行文件中

是否可以使用可在运行时使用的SDL在程序中嵌入图像.

例如,我有一个程序在启动时显示包含徽标和版权信息的启动画面.而不是将此图像放在位图文件中,并使用SDL_LoadBMP将其加载到SDL_Surface.我希望将图像嵌入到程序二进制文件中,以阻止某人可能更改启动图像和版权名称.

有没有人对如何做到这一点有任何建议?示例代码会很棒.

c c++ sdl image bitmap

11
推荐指数
1
解决办法
3628
查看次数

SDL2渲染到QWidget

我正在寻找将我在GTK2和SDL1.2中编写的模拟器移植到使用QT5和SDL2.0.3.到目前为止,只要模拟器在SDL2中独立工作并且GUI在QT中工作正常,它们都可以互动.我的问题是尝试让SDL2出现在QWidget中.这是使用窗口黑客方法在SDL1.2中正常工作的东西.

从一切我在线阅读,这可以用下来SDL_CreateWindowFrom函数获取winId()从Qt物件,并将其传递到它.但是,这似乎适用于使用openGL的情况.

我想知道的是当我只使用SDL2的标准绘图功能到纹理,没有OpenGL时如何做到这一点.到目前为止,我所有的尝试都失败了,SDL根本没有出现在小部件中.

或者,我知道您可以将SDL_Suface转换为QImage.每当QImage更新(60fps)时,我将如何让QT Widget更新.与此相关的复杂因素是QT和SDL在单独的线程中运行.

如果有人知道指向我的方向或一些可能导致答案的有用示例代码,我会非常感激.我没有提供代码,因为我还不确定如何做,提供任何代码.

EDIT
Run Code Online (Sandbox Code Playgroud)

经过一些SDL和QT的试验.我已经设法使用标准绘图工具将SDL2绘制到QWidget中.但是,这仅在将渲染器设置为时才有效SDL_RENDERER_SOFTWARE.如果我尝试使用SDL_RENDERER_ACCELERATED,我也会这样做.它导致QT窗口完全锁定并且无法绘制任何内容(包括窗口中的所有其他小部件),并最终因操作系统没有响应而终止(在我的测试用例中为Kubuntu).

有没有人知道为什么会这样.SDL_RENDERER_ACCELERATED当SDL2绘制到用SDL_CreateWindow和创建的自己的窗口时,我可以使用SDL_CreateRenderer.绘制到QWidget时它只是一个问题.

这是我到目前为止的代码:

main.cpp中

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

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    SDL_Init(SDL_INIT_VIDEO);
    SDL_Window* window = SDL_CreateWindowFrom((void*)w.ptr_gfx->winId());
    SDL_Renderer* render = SDL_CreateRenderer(window, -1, SDL_RENDERER_SOFTWARE);

    SDL_SetRenderDrawColor(render, 255, 0, 0, 255);
    SDL_RenderFillRect(render, NULL);
    SDL_RenderPresent(render);

    return a.exec();

    SDL_DestroyWindow(window);
    SDL_DestroyRenderer(render);
    SDL_Quit();
}
Run Code Online (Sandbox Code Playgroud)

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{ …
Run Code Online (Sandbox Code Playgroud)

c++ qt qwidget sdl-2

6
推荐指数
1
解决办法
3236
查看次数

SDL 在不使用事件的情况下获取键盘状态

有谁知道如何让 SDL_GetKeyState 正常工作,而不必设置轮询 SDL 事件的循环?

int *keystates;
keystates = SDL_GetKeyState(NULL);
SDL_PumpEvents();
std::cout << "Test 1\n";
if (keystates[SDLK_F1]) {
    std::cout << "Test 1 Okay\n";
    key_ac = true;
    emu->setPower(true);
}
Run Code Online (Sandbox Code Playgroud)

这段代码每秒运行 100 多次,但是即使我按住 F1 键,我仍然没有得到任何输出表明它成功了。

我没有 SDL 事件循环,所以这可能是因为我没有使用它们而丢弃事件吗?在这种情况下,我怎样才能让 SDL 过滤掉所有事件?

c++ gtk keyboard events sdl

3
推荐指数
1
解决办法
5774
查看次数

GTK 使用 Glade 将用户数据传递给回调

我注意到 Glade 只允许您设置要在 GTK 回调的用户数据部分中传递的对象。

有什么方法可以传递整数值吗?

我有一组菜单项,我想将它们指向同一个回调函数,但是对于一小部分代码,我需要确定哪个菜单项是调用回调的菜单项。

注意:我的所有信号都是使用glade_xml_signal_autoconnect自动设置的,我更愿意保持这种方式。

c gtk signals glade callback

3
推荐指数
1
解决办法
4767
查看次数

标签 统计

c++ ×3

c ×2

gtk ×2

sdl ×2

bitmap ×1

callback ×1

events ×1

glade ×1

image ×1

keyboard ×1

qt ×1

qwidget ×1

sdl-2 ×1

signals ×1