景云飞 2025-01-03 19:59 采纳率: 0%
浏览 39

qt6如何禁用direct12,改为使用direct11

qt6程序在direct11电脑上运行出现无法定位程序输入点D3D12SerializeVersionedRootSignature于动态库Qt6Gui.dll上,如何解决?
根据这个办法,还是不行,https://ask.csdn.net/questions/8134163?%%E8%AF%B7%E5%A4%A7%E7%A5%9E%E5%B8%AE%E5%B8%AE%E6%88%91

  • 写回答

4条回答 默认 最新

  • CLLLLLLY 2025-01-03 20:00
    关注
    我长期活跃于技术社区,热衷于帮助他人解决各类技术难题。很高兴在 CSDN 上回答你的问题,让我们一起探讨,找到解决问题的最佳方案吧。
    以下是解决在Qt6中禁用Direct12并使用Direct11的方法:

    方法一:通过环境变量设置

    • 原理 在Windows系统中,可以通过设置环境变量来影响应用程序对DirectX版本的选择。通过设置QT_OPENGL环境变量为desktop,可以强制Qt使用桌面OpenGL,而不是Direct3D 12等其他图形API。
    • 操作步骤
      1. 在运行Qt6程序之前,在系统环境变量中添加名为QT_OPENGL的变量,并将其值设置为desktop
      2. 或者在程序启动脚本(如批处理文件等)中设置该环境变量,例如在批处理文件中可以这样写:
    set QT_OPENGL=desktop
    your_program.exe
    

    方法二:在代码中设置

    • 原理 Qt提供了相关的API来设置图形相关的属性,在程序启动时通过QCoreApplication::setAttribute函数可以设置AA_UseDesktopOpenGL属性,这将使得程序使用桌面OpenGL而不是Direct3D 12。
    • 代码示例
    #include <QCoreApplication>
    #include <QGuiApplication>
    #include <QWidget>
    
    int main(int argc, char *argv[])
    {
        // 设置使用桌面OpenGL
        QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL);
    
        QGuiApplication app(argc, argv);
    
        QWidget window;
        window.show();
    
        return app.exec();
    }
    

    通过上述方法,应该可以解决Qt6程序在Direct11电脑上出现的关于找不到Direct3D 12相关函数入口点的问题,因为程序将不再尝试使用Direct3D 12,而是使用Direct3D 11或者OpenGL等其他兼容的图形API。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月3日