[ Technical exchange] 如意玲珑qt5程序报错无法找到Qt platform plugin "dxcb" 的解决方案
Tofloor
poster avatar
MeGusta
deepin
2025-07-28 01:13
Author

方法如下:

1.从仓库下载deb包:

apt download libxcb-damage0 libxcb-composite0 libqt5xdg3 libqt5xdgiconloader3 dde-qt5integration dde-qt5xcb-plugin

2.解压deb之后,获取并组织好如下几个文件:

截图_选择区域_20250728005514.jpg

3.在启动程序时,添加环境变量,再启动程序(scdtool.bin),如

export QT_PLUGIN_PATH="$QT_PLUGIN_PATH:/opt/apps/${LINGLONG_APPID}/files/lib/x86_64-linux-gnu/qt5/plugins"
export QT_QPA_PLATFORM_PLUGIN_PATH="$QT_QPA_PLATFORM_PLUGIN_PATH:/opt/apps/${LINGLONG_APPID}/files/lib/x86_64-linux-gnu/qt5/plugins/platforms"

4.在其他的base/runtime环境中,如果没有生效,请用ldd来逐个调试上面动态库是不是缺失依赖。

5.在使用玲珑杀手构建qt5玲珑包时,建议在依赖列表deps.list中加入这几个包,以调用dde样式的文件浏览器、窗口装饰。

=======================================================

在deepin/玲珑环境中,有一个默认的环境变量 QT_QPA_PLATFORM=dxcb;xcb,qt5程序默认会优先使用dde的dxcb样式。

在组件不全的情况下,dxcb就无法应用,就会报错,在系统中找不到dxcb样式插件。此时系统就会降级使用qt默认的xcb样式。

经过查询,依赖的libdxcb.so文件,是在 dde-qt5xcb-plugin这个包里面。之前通过 ldd libdxcb.so | grep not这个命令补齐了依赖,但还是没有解决问题,因此猜测应该还是缺其他东西。

通过查看包含dtk的runtime: org.deepin.Runtime/23.0.1.4的package.list。猜测一下,也许是缺dde开头的这个包:dde-qt5integration

继续通过ldd大法,补齐依赖,添加QT环境变量,再次打包运行之后,发现果然验证了之前的猜想。

效果对比如下,分别是qt5默认的xcb样式,和dde的dxcb样式:

image.png

截图_选择区域_20250728010352.jpg

另外,希望官方多写点文档。目前的情况是,出现问题之后,如同盲人摸象,只能连猜带蒙,比较耗费时间。

Reply Favorite View the author
All Replies
Feelup
deepin
2025-07-28 06:17
#1

这个厉害,困惑了我好久。

Reply View the author
waittingsummer
deepin
2025-07-28 08:49
#2

牛逼👍

Reply View the author
Free_Aaron.Li
deepin
2025-07-28 09:03
#3

我之前使用CLion开发Qt时也遇到过这个问题,由于是自己安装的Qt,所以直接在IDE端环境变量中删除掉dxcb这个变量。

Reply View the author
kero990
deepin
2025-07-28 10:02
#4

这也是一直困扰我的问题,我用debian10开发环境,如果用apt的qt5-default编译,就会有dde样式,但如果用我自己编译的qt5,就没有。我问过很多人都不知道问题在哪

那么所以现在也还有一个问题请教,如果我想要集成dde的xcb样式,那么是需要在编译完成,集成的时候把文件集成好就行,还是说必须使用带有插件的qt才行?如果qt没这个插件,编译完也没法集成吗?

另外就是,这玩意有没有qt6版

Reply View the author
MeGusta
deepin
2025-07-28 10:42
#5
kero990

这也是一直困扰我的问题,我用debian10开发环境,如果用apt的qt5-default编译,就会有dde样式,但如果用我自己编译的qt5,就没有。我问过很多人都不知道问题在哪

那么所以现在也还有一个问题请教,如果我想要集成dde的xcb样式,那么是需要在编译完成,集成的时候把文件集成好就行,还是说必须使用带有插件的qt才行?如果qt没这个插件,编译完也没法集成吗?

另外就是,这玩意有没有qt6版

我在编译过程中没有管这个问题,依赖的是仓库里面qt5-default,是在运行的时候才注意到。

我没有编译过qt5,所以自定义qt5环境的情况我不清楚。

我在pkgs.org里面搜索了一下,在ubuntu 22和debian 11开始,他们仓库里面也有这几个组件了。个人觉得,这几个组件是不是与程序本身无关,而是采用 QT_QPA_PLATFORM=dxcb;xcb这个环境变量时,启用dxcb窗口样式的一个必要条件。

qt6环境里面也有,不然deepin25也没有办法应用dxcb样式,涉及的qt6包名如下:

dde-qt6xcb-plugin
dde-qt6integration
libqt6xdg4
libqt6xdgiconloader4
Reply View the author
静夜思
Super Moderator
2025-07-28 11:14
#6

旧版本runtime的问题,在 org.deepin.runtime.dtk 23 修了这个问题

Reply View the author
MeGusta
deepin
2025-07-28 11:27
#7
静夜思

旧版本runtime的问题,在 org.deepin.runtime.dtk 23 修了这个问题

玲珑文档里面介绍了,但是仓库里面好像没有搜索到这个runtime:

org.deepin.runtime.dtk/23

Reply View the author
myml
Super Moderator
Developer
2025-07-28 18:15
#8

base: org.deepin.base/23.1.0
runtime: org.deepin.runtime.dtk/23.1.0

试试这个

Reply View the author
MeGusta
deepin
2025-07-28 19:34
#9
myml

base: org.deepin.base/23.1.0
runtime: org.deepin.runtime.dtk/23.1.0

试试这个

ll-cli search搜索不到,但是在yaml里面可以拉取了。谢谢!

Reply View the author