Qt 报错qt.qpa.plugin: Could not find the Qt platform plugin “xcb“ in ““【已解决】

报错qt.qpa.plugin: Could not find the Qt platform plugin "xcb" in ""

一、问题描述

    1. 使用linuxdeployqt打包Qt程序,在一台电脑上正常运行,拷贝到另一台电脑上报错:
bash 复制代码
qt.qpa.plugin: Could not find the Qt platform plugin "xcb" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
    1. 打开qtcreator或其他Qt程序,报如上错误.

解决qt.qpa.plugin: Could not find the Qt platform plugin "xcb" in "":https://blog.csdn.net/Mr_guocxy/article/details/139812895

解决qt.qpa.plugin: Could not find the Qt platform plugin "xcb" in "":https://blog.csdn.net/sksukai/article/details/107325930

二、解决方案

问题原因是没有找到相关库,或者相关库的依赖有问题。

    1. 设置环境变量,使程序可找到libqxcb.so
bash 复制代码
export QT_QPA_PLATFORM_PLUGIN_PATH=/xxx/qt的安装目录/plugins/platforms
    1. 可使用qt.conf文件,指定相关路径Plugins = plugins
      如果使用linuxdeployqt,可能会自动生成 (测试了不加-qmake选项,会自动生成qt.conf,如有兴趣可继续深入linuxdeployqt源码).
bash 复制代码
# Generated by linuxdeployqt
# https://github.com/probonopd/linuxdeployqt/
[Paths]
Prefix = ./
Plugins = plugins
Imports = qml
Qml2Imports = qml

三、关于qt.conf

官方文档推荐使用qt.conf

  • 所有Qt图形用户界面(GUI)应用程序都需要一个实现Qt平台抽象(QPA)层的插件。对于Linux/X11系统,平台插件的名称是libqxcb.so。此文件必须位于您的发行版目录下的特定子目录中(默认为platforms)。或者,也可以按照下文所述,调整Qt用于查找其插件的搜索路径。
    Qt插件的搜索路径(以及其他一些路径)是硬编码到QtCore库中的。默认情况下,第一个插件搜索路径将被硬编码为/path/to/Qt/plugins。如上所述,使用预定路径存在某些缺点,因此您需要检查各种替代方案以确保找到Qt插件:使用qt.conf。这是推荐的方法,因为它提供了最大的灵活性。
    1. 作用: qt.conf 文件来覆盖路径或指定要传递给平台插件的参数

qt.conf 文件可用于覆盖编译到 Qt XML 库中的硬编码路径。这些路径可通过QLibraryInfo 类访问。如果没有qt.conf ,QLibraryInfo 中的函数将返回这些硬编码路径;否则,它们将返回qt.conf 中指定的路径。如果没有qt.conf ,Qt XML 库将使用硬编码路径来查找插件、翻译等。这些路径可能不存在于目标系统中,也可能无法访问。因此,您可能需要qt.conf 来让 Qt XML 库在其他地方查找。

    1. 位置,QLibraryInfo 将从以下位置之一加载qt.conf:
  • :/qt/etc/qt.conf 使用资源系统
  • 在 macOS 上,在应用程序捆绑包内的资源目录中, assistant.app/Contents/Resources/qt.conf
  • 包含应用程序可执行文件的目录中,即QCoreApplication::applicationDirPath() +QDir::separator() + "qt.conf"
    1. 文件参数:使用qt.conf 文件中指定的绝对路径。所有路径都相对于Prefix 。在 Windows 和 X11 上,Prefix 相对于包含应用程序可执行文件的目录。在 macOS 上,Prefix 与应用程序捆绑包中的Contents 相对。
相关推荐
君顾19 小时前
上海24小时自助健身房系统开发实战指南:从架构设计到落地部署
java·开发语言·健身房
香菜TTT9 小时前
大模型上下文协议(MCP):AI 应用的“USB-C”接口技术
开发语言·人工智能·经验分享
aramae9 小时前
模拟实现strlen()函数 (C语言)
c语言·开发语言·后端
Quz10 小时前
QML 常见的四种导航布局
qt
jimy110 小时前
readelf 查看“派生类”的vtable符号
开发语言·c++
ctlover11 小时前
排序与查找算法详解
开发语言·python
YYYing.11 小时前
【C++进阶系列 (七)】C++ RTTI 深度剖析:从 typeid 到 dynamic_cast 的底层之旅
开发语言·c++·c/c++·rtti
江湖人称菠萝包12 小时前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter2-GUI应用程序设计基础
笔记·qt·qt5
nvvas12 小时前
Java 入门(四):数组——数据的集合管理
java·开发语言
重生的黑客13 小时前
Qt 常用控件精讲(1):QWidget 核心属性全解 —— 从 geometry 到 qrc 与 QSS
c++·qt·qwidget·qss·常用控件