window和linux安装qt5.2注意事项

本文介绍了如何在Windows和Linux环境下正确配置QT开发环境,包括环境变量的设置、依赖库的安装等关键步骤,确保QT应用程序能够顺利编译并运行。
windows下环境变量path需要加入以下路径,以便QT写的程序可以离开QT开发环境独立运行
C:\Qt\Qt5.2.0\5.2.0\\mingw48_32\bin\;C:\Qt\Qt5.2.0\Tools\mingw48_32\bin;

linux安装的时候需要确定操作系统位数

将qt-linux-opensource-5.2.0-x86_64-offline.run设置权限chmod 775 qt-linux-opensource-5.2.0-x86_64-offline.run

linux下需要设置.bash_profile文件

PATH中加入/opt/Qt5.2.0/5.2.0/gcc/bin,这样才可以找到qmake文件

然后会出现如下问题/usr/bin/ld: cannot find -lGL,这说明Linux默认没有安装这个库,需要进行如下操作

用root用户登录系统,进入/usr/lib目录后执行,32为和64位操作系统下路径不同64位下是/usr/lib64
ln libGL.so.1 libGL.so
<think>我们正在解决Qt5 CMake中找不到QWinTaskbarProgress的问题。QWinTaskbarProgress是Windows平台特有的类,用于任务栏进度条显示,属于QtWinExtras模块。因此,解决方案的核心是确保正确链接Qt5::WinExtras模块并处理Windows平台特定配置。 ### 解决步骤 #### 1. **确认QtWinExtras模块的包含关系** - `QWinTaskbarProgress` 类定义在 `<QtWinExtras/QWinTaskbarProgress>` 头文件中。 - 在代码中必须包含该头文件: ```cpp #include <QtWinExtras/QWinTaskbarProgress> ``` #### 2. **修改CMakeLists.txt配置** - 使用 `find_package` 引入 `WinExtras` 组件。 - 将 `Qt5::WinExtras` 链接到目标。 示例CMakeLists.txt: ```cmake cmake_minimum_required(VERSION 3.10) project(MyWinApp VERSION 0.1 LANGUAGES CXX) # 查找Qt5组件,必须包含WinExtras find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets WinExtras) # 根据项目需要添加其他组件 set(CMAKE_AUTOMOC ON) set(CMAKE_CXX_STANDARD 11) # 如果是Windows平台才启用相关代码 if(WIN32) add_definitions(-DQT_WINEXTRAS_LIB) # 可选,用于条件编译 endif() add_executable(${PROJECT_NAME} main.cpp mainwindow.cpp) # 链接Qt5::WinExtras target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets Qt5::WinExtras) ``` #### 3. **代码中的平台条件编译** 由于 `QWinTaskbarProgress` 仅适用于Windows,建议使用条件编译: ```cpp #ifdef Q_OS_WIN #include <QtWinExtras/QWinTaskbarProgress> #endif ``` 在使用时: ```cpp #ifdef Q_OS_WIN QWinTaskbarButton *button = new QWinTaskbarButton(this); button->setWindow(windowHandle()); // 关联到窗口 QWinTaskbarProgress *progress = button->progress(); progress->setVisible(true); progress->setValue(50); #endif ``` #### 4. **确保Qt安装包含WinExtras模块** - 通过Qt Maintenance Tool检查是否安装了`QtWinExtras`模块。 - 在Windows上,确保Qt的bin目录(例如`C:\Qt\5.15.2\msvc2019_64\bin`)中有`Qt5WinExtras.dll`。 #### 5. **运行时部署** - 部署应用程序时,需要将`Qt5WinExtras.dll`复制到可执行文件目录。 - 使用`windeployqt`工具自动处理: ```bash windeployqt --qmldir <qml目录> <可执行文件路径> ``` ### 常见问题排查 1. **CMake配置错误**: - 错误信息:`fatal error: QtWinExtras/QWinTaskbarProgress: No such file or directory` - 原因:CMake未链接`Qt5::WinExtras`。 - 解决:在`find_package`中添加`WinExtras`组件,并重新运行CMake。 2. **链接错误**: - 错误信息:`undefined reference to QWinTaskbarProgress...` - 原因:未链接`Qt5::WinExtras`库。 - 解决:在`target_link_libraries`中添加`Qt5::WinExtras`。 3. **运行时错误**: - 程序启动时崩溃或功能缺失。 - 可能原因:缺少`Qt5WinExtras.dll`。 - 解决:使用`windeployqt`部署或手动复制DLL。 ### 完整代码示例 **CMakeLists.txt**: ```cmake cmake_minimum_required(VERSION 3.10) project(WindowsTaskbarDemo) set(CMAKE_CXX_STANDARD 11) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) find_package(Qt5 REQUIRED COMPONENTS Core Widgets WinExtras) add_executable(demo main.cpp) target_link_libraries(demo PRIVATE Qt5::Core Qt5::Widgets Qt5::WinExtras) ``` **main.cpp**: ```cpp #include <QApplication> #include <QMainWindow> #ifdef Q_OS_WIN #include <QtWinExtras/QWinTaskbarButton> #include <QtWinExtras/QWinTaskbarProgress> #endif int main(int argc, char *argv[]) { QApplication app(argc, argv); QMainWindow window; window.show(); #ifdef Q_OS_WIN // 创建任务栏进度条 QWinTaskbarButton *button = new QWinTaskbarButton(&window); button->setWindow(window.windowHandle()); QWinTaskbarProgress *progress = button->progress(); progress->setVisible(true); progress->setRange(0, 100); progress->setValue(50); #endif return app.exec(); } ``` ### 注意事项 - **平台限制**:`QWinTaskbarProgress`仅在Windows 7及以上版本有效,且需启用Aero效果。 - **Qt版本**:确保使用Qt5.2或更高版本(该模块在Qt5.2引入)。 - **替代方案**:跨平台应用应考虑使用Qt的公共API(如`QProgressBar`)或自行封装平台相关代码。 通过以上步骤,应能解决CMake构建Qt5 Windows应用程序时找不到`QWinTaskbarProgress`的问题。 --- §§相关问题§§ 1. 在CMake中如何根据平台条件链接不同的Qt模块? 2. 如何检查Qt安装是否包含特定模块(如WinExtras)? 3. 使用`QWinTaskbarProgress`时需要注意哪些平台兼容性问题? </think>### 解决 Qt5 CMake 中找不到 QWinTaskbarProgress 的问题 `QWinTaskbarProgress` 是 Windows 平台特有的类,属于 `QtWinExtras` 模块,用于任务栏进度条功能。找不到该类通常是因为缺少模块链接或平台配置错误。以下是完整解决方案: --- ### **步骤 1: 确认模块依赖** `QWinTaskbarProgress` 需要以下组件: 1. **QtWinExtras 模块**:提供 Windows 专用 API 2. **Windows 平台限定**:仅能在 Windows 系统使用 3. **Qt5Widgets**:基础依赖模块 ```cmake # CMakeLists.txt 关键配置 find_package(Qt5 REQUIRED COMPONENTS Core Gui Widgets WinExtras # 必须包含此模块 ) ``` --- ### **步骤 2: 修改 CMakeLists.txt** #### 2.1 添加平台条件判断 ```cmake if(WIN32) # 仅限Windows平台 find_package(Qt5 COMPONENTS WinExtras REQUIRED) add_definitions(-DQT_WINEXTRAS_LIB) # 启用WinExtras宏 endif() ``` #### 2.2 链接 WinExtras 模块 ```cmake add_executable(MyApp main.cpp) if(WIN32) target_link_libraries(MyApp PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets Qt5::WinExtras # 关键链接 ) endif() ``` --- ### **步骤 3: 代码中的平台适配** #### 3.1 头文件包含(需平台判断) ```cpp #ifdef Q_OS_WIN #include <QtWinExtras/QWinTaskbarProgress> #include <QtWinExtras/QWinTaskbarButton> #endif ``` #### 3.2 使用示例 ```cpp #ifdef Q_OS_WIN // 创建任务栏进度条 QWinTaskbarButton *taskbarButton = new QWinTaskbarButton(this); taskbarButton->setWindow(windowHandle()); // 关联窗口句柄 QWinTaskbarProgress *progress = taskbarButton->progress(); progress->setVisible(true); progress->setValue(50); // 设置进度值 #endif ``` --- ### **步骤 4: 验证 Qt 安装** 确保 Qt 安装包含 `WinExtras` 模块: 1. 检查目录:`<Qt安装路径>/5.15.2/msvc2019_64/include/QtWinExtras` 2. 验证库文件:`Qt5WinExtras.lib` (Windows) 或 `libQt5WinExtras.so` (Linux交叉编译) ```bash # 检查模块是否存在 $ find /path/to/Qt -name "*WinExtras*" ``` --- ### **常见错误解决方案** | **错误类型** | **原因** | **修复方案** | |-------------|---------|------------| | `QWinTaskbarProgress: No such file` | 缺少头文件包含 | 添加 `#include <QtWinExtras/QWinTaskbarProgress>` | | `undefined reference` | 链接缺失 | CMake中链接 `Qt5::WinExtras` | | 运行时无效果 | 窗口句柄未关联 | 调用 `setWindow(windowHandle())` | | Linux/Mac报错 | 跨平台误用 | 使用 `#ifdef Q_OS_WIN` 条件编译 | --- ### **完整 CMakeLists.txt 示例** ```cmake cmake_minimum_required(VERSION 3.10) project(WindowsTaskbarDemo) # 基础Qt模块 find_package(Qt5 COMPONENTS Core Widgets REQUIRED) # Windows专用配置 if(WIN32) find_package(Qt5 COMPONENTS WinExtras REQUIRED) add_definitions(-DQT_WINEXTRAS_LIB) endif() set(CMAKE_AUTOMOC ON) set(CMAKE_CXX_STANDARD 11) add_executable(app main.cpp) # 链接依赖 target_link_libraries(app PRIVATE Qt5::Core Qt5::Widgets ) if(WIN32) target_link_libraries(app PRIVATE Qt5::WinExtras) endif() ``` --- ### **部署注意事项** 1. **运行时依赖**:部署需包含 `Qt5WinExtras.dll`(位于 `<Qt>/bin`) 2. **windeployqt 自动部署**: ```bash windeployqt --qmldir <QML_DIR> <APP.exe> --compiler-runtime ``` 3. **兼容性**:仅支持 Windows 7 及以上系统 通过以上步骤,可解决 CMake 构建 Qt5 Windows 应用时找不到 `QWinTaskbarProgress` 的问题。关键点是确保正确链接 `WinExtras` 模块并进行平台条件编译[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值