问题描述
今天在使qtcreator的时候,想要去qt的帮助查看文档,但是点击后发现卡死,因为我是ubuntu22.04,qt5.15是通过apt安装的,可以在终端输入qtcreator
打开,但是这时候是可以打开帮助查看文档的,我之前有创建了一个qtcreator的桌面文件,双击这个桌面文件打开帮助就会卡死,但是如果在桌面路径的终端环境下运行桌面文件就没问题
是整个电脑卡死,连微信截图都用不了
解决方法
发现了差异,就知道大概是运行环境的问题,应该是桌面双击启动和终端命令行启动环境不同导致的,我们可以直接运行
sudo journalctl | grep qtcreator
就可以获取qtcreator相关日志,我电脑打印了如下信息:
5月 12 18:04:21 qin org.qt-project.qtcreator.desktop\[109764]: QSqlDatabasePrivate::addDatabase: duplicate connection name 'QHelpCollectionHandler-94572589021552-56662', old connection removed.
5月 12 18:04:21 qin org.qt-project.qtcreator.desktop\[109764]: QSqlDatabase: QSQLITE driver not loaded
5月 12 18:04:21 qin org.qt-project.qtcreator.desktop\[109764]: QSqlDatabase: available drivers:
5月 12 18:04:21 qin org.qt-project.qtcreator.desktop\[109764]: QSqlDatabasePrivate::addDatabase: duplicate connection name 'QHelpCollectionHandler-94572589021552-56663', old connection removed.
5月 12 18:04:21 qin org.qt-project.qtcreator.desktop\[109764]: QSqlDatabase: QSQLITE driver not loaded
5月 12 18:04:21 qin org.qt-project.qtcreator.desktop\[109764]: QSqlDatabase: available drivers:
5月 12 18:04:21 qin org.qt-project.qtcreator.desktop\[109764]: QSqlDatabasePrivate::addDatabase: duplicate connection name 'QHelpCollectionHandler-94572589021552-56664', old connection removed.
5月 12 18:04:21 qin org.qt-project.qtcreator.desktop\[109764]: QSqlDatabase: QSQLITE driver not loaded
5月 12 18:24:47 qin gnome-shell\[2302]: DING: Usage: qtcreator \[OPTION]... \[FILE]...
5月 12 18:24:54 qin gnome-shell\[2302]: DING: Usage: qtcreator \[OPTION]... \[FILE]...
5月 12 18:27:01 qin gnome-shell\[2302]: DING: Usage: qtcreator \[OPTION]... \[FILE]...
5月 12 18:27:04 qin gnome-shell\[2302]: DING: Usage: qtcreator \[OPTION]... \[FILE]...
主要错误信息:
QSqlDatabase: QSQLITE driver not loaded
QSqlDatabase: available drivers:
解释:
终端启动 qtcreator 时,继承了你终端的环境变量,能够找到 Qt 插件目录(例如包含 libqsqlite.so 的 sqldrivers)。
而桌面快捷方式启动(通过 .desktop 文件)是由 GNOME shell 启动的,它不会继承你的用户终端环境变量,比如 QT_PLUGIN_PATH 或 LD_LIBRARY_PATH,所以会导致缺失插件,帮助模块尝试加载但失败,引发 UI 卡死。
修改desktop文件
那了解了原因,我们直接在desktop文件中加上环境即可
首先查找libqsqlite.so
的位置
find /usr -name libqsqlite.so
我的位置:
/usr/local/Qt-5.15.3/plugins/sqldrivers/libqsqlite.so
我的原来desktop文件:
[Desktop Entry]
Name=Qt Creator
Exec=/usr/bin/qtcreator
Icon=/usr/local/Qt-5.15.3/doc/global/template/images/logo.png
Type=Application
Terminal=false
在Exec的可执行文件路径前加上:
env QT_PLUGIN_PATH=/usr/local/Qt-5.15.3/plugins
将QT_PLUGIN_PATH变量传递,修改后的desktop文件:
[Desktop Entry]
Name=Qt Creator
Exec=env QT_PLUGIN_PATH=/usr/local/Qt-5.15.3/plugins /usr/bin/qtcreator
Icon=/usr/local/Qt-5.15.3/doc/global/template/images/logo.png
Type=Application
Terminal=false
然后保存退出再次双击qtcreator桌面文件
点开帮助不会卡死,也加载出了文档