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 相对。
相关推荐
听风吹等浪起4 小时前
用Python和Pygame从零实现坦克大战
开发语言·python·pygame
灰色小旋风4 小时前
力扣合并K个升序链表C++
java·开发语言
_MyFavorite_4 小时前
JAVA重点基础、进阶知识及易错点总结(28)接口默认方法与静态方法
java·开发语言·windows
取码网4 小时前
最新在线留言板系统PHP源码
开发语言·php
环黄金线HHJX.4 小时前
龙虾钳足启发的AI集群语言交互新范式
开发语言·人工智能·算法·编辑器·交互
不写八个5 小时前
PHP教程006:ThinkPHP项目入门
开发语言·php
_MyFavorite_5 小时前
JAVA重点基础、进阶知识及易错点总结(31)设计模式基础(单例、工厂)
java·开发语言·设计模式
A.A呐5 小时前
【C++第二十三章】C++11
开发语言·c++
智算菩萨5 小时前
【Pygame】第8章 文字渲染与字体系统(支持中文字体)
开发语言·python·pygame
014-code6 小时前
Java SPI 实战:ServiceLoader 的正确打开方式(含类加载器坑)
java·开发语言