【问题标题】:Cmake cannot find QGLWidgetCmake 找不到 QGLWidget
【发布时间】:2015-04-23 01:48:48
【问题描述】:

几年前我在 Windows 上的 QtCreator 中编写了一个简单的弹跳球程序,现在我尝试使用 CMakeLists 而不是 Qt 项目文件在 Linux (Ubuntu 14.04) 上重建它。我的 CMakeLists.txt 文件(大致基于this question 中的 cmake 文件如下。

cmake_minimum_required ( VERSION 2.6 )
project ( BouncyBall )

find_package ( Qt4 COMPONENTS QtGui QtOpenGL REQUIRED )
set (QT_USE_QTOPENGL TRUE)
include(${QT_USE_FILE})
add_definitions(${QT_DEFINITIONS})
include_directories( ${QT_QTOPENGL_INCLUDE_DIR} ${OPENGL_INCLUDE_DIR} )

find_package ( Bullet REQUIRED )

add_executable ( BouncyBall main.cpp BouncyBall.cpp BulletWidget.cpp )
target_link_libraries( BouncyBall ${QT_LIBRARIES} ${BULLET_LIBRARIES} )

Cmake 配置并生成构建文件没有任何错误,但无法编译并出现以下错误:

[ 33%] Building CXX object CMakeFiles/BouncyBall.dir/main.cpp.o
/usr/bin/c++   -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_OPENGL_LIB -isystem /usr/include/qt4 -isystem /usr/include/qt4/QtOpenGL -isystem /usr/include/qt4/QtGui -I/home/user/Programs/BuildArea/Games/BouncyBall    -o CMakeFiles/BouncyBall.dir/main.cpp.o -c /home/user/Programs/Games/BouncyBall/main.cpp
In file included from /home/user/Programs/Games/BouncyBall/main.cpp:2:0:
/home/user/Programs/Games/BouncyBall/BulletWidget.h:4:30: fatal error: QtOpenGl/QGLWidget: No such file or directory
 #include <QtOpenGl/QGLWidget>

我已验证该文件确实在 /usr/include/qt4/QtOpenGL 中。我在网上查看过,但我找到的所有解决方案都是指将QT += opengl 添加到项目文件(但我使用的是 CMake)或没有安装 dev-tools 或 qt-sdk 包(我这样做有)。

我错过了什么?

【问题讨论】:

  • 你不需要在#include 指令中写QtOpenGL/。包含目录${QT_QTOPENGL_INCLUDE_DIR} 应该已经为您完成了这项工作。请改用#include &lt;QGLWidget&gt;,这将对移动此文件的版本更改更具弹性。

标签: c++ qt opengl cmake


【解决方案1】:

您的代码“QtOpenGl/QGLWidget”中没有错字吗? QtOpenGl 应该改为 QtOpenGL。如果您在 Linux 上执行此操作,则情况很重要。

【讨论】:

  • 这很棘手。我原本在#include 指令中没有QtOpenGl/(就像@Nobody 说的,我不需要它),而且我最初也没有安装qt-sdk。我根据网上某人的建议将该文件夹添加到#include(不应该有所作为,但不会受到伤害吗?),后来发现我错过了qt-sdk。这个错字使错误消息保持不变,并隐藏了我已经解决了原始问题的事实。无论如何,很好的收获。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
  • 2016-04-14
  • 2021-07-23
  • 2011-08-20
  • 2018-01-20
  • 2023-03-28
相关资源
最近更新 更多