如何解决ZorinOS 17下Qt编译报错‘qwidgetsglobal.h not found’
解决ZorinOS 17中Qt5/Qt6编译时找不到qtwidgetsglobal.h的问题
问题描述
编译Qt5 C++程序时出现以下错误:
In file included from /usr/include/x86_64-linux-gnu/qt5/QtWidgets/QApplication:1, from main.cpp:1: /usr/include/x86_64-linux-gnu/qt5/QtWidgets/qapplication.h:43:10: fatal error: QtWidgets/qtwidgetsglobal.h: No such file or directory 43 | #include <QtWidgets/qtwidgetsglobal.h> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compilation terminated.
环境为基于Ubuntu的ZorinOS 17,系统无qt5-default包,手动安装Qt模块后Qt5、Qt6均出现该错误,通过apt无法找到与qwidgetsglobal相关的包。此前Windows MSYS2 Mingw-w64环境中Qt5正常、Qt6无法使用,当前ZorinOS上Qt5也报此错。
用户代码示例:
#include <qt5/QtWidgets/QApplication> #include <qt5/QtWidgets/QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); // Create a QPushButton with the label "Click Me!" QPushButton button("Click Me!"); // Connect the button's clicked signal to the slot handling the click event QObject::connect(&button, &QPushButton::clicked, [&]() { // Slot code - executed when the button is clicked qDebug("Button Clicked!"); }); // Set up the main window button.show(); // Start the application event loop return app.exec(); }
解决方案
1. 修正代码中的头文件引用
代码中无需添加qt5/前缀,系统安装的Qt头文件路径已在编译器搜索范围内,修改include语句为:
#include <QApplication> #include <QPushButton>
2. 确保Qt开发包安装完整
- 对于Qt5,执行以下命令安装/重装核心开发包:
sudo apt update sudo apt install --reinstall qtbase5-dev qtbase5-dev-tools pkg-config - 对于Qt6,对应安装命令:
sudo apt update sudo apt install --reinstall qt6-base-dev qt6-base-dev-tools pkg-config
3. 使用正确的编译方式
方式一:用qmake编译(推荐)
- 创建项目配置文件
main.pro:# Qt5版本 QT += widgets SOURCES += main.cpp # 如果是Qt6,替换为以下内容 # QT += widgets core gui - 执行编译命令:
# Qt5 qmake-qt5 main.pro && make # Qt6 qmake6 main.pro && make
方式二:直接用g++编译
利用pkg-config自动获取编译参数:
- Qt5:
g++ main.cpp -o qt_app $(pkg-config --cflags --libs Qt5Widgets) - Qt6:
g++ main.cpp -o qt_app $(pkg-config --cflags --libs Qt6Widgets)
4. 验证头文件存在性
检查qtwidgetsglobal.h是否存在于正确路径:
- Qt5路径:
/usr/include/x86_64-linux-gnu/qt5/QtWidgets/QtWidgets/qtwidgetsglobal.h - Qt6路径:
/usr/include/x86_64-linux-gnu/qt6/QtWidgets/QtWidgets/qtwidgetsglobal.h
如果路径不存在,说明包安装不完整,重新执行步骤2的重装命令。
内容的提问来源于stack exchange,提问作者Diya Al Deen
相关产品推荐
相关产品推荐

