Qt 5.3中,QtWidgets库找不到 #include <QtWidgets>。

10
我想编译Qt示例。我遇到了错误的QtWidgets:没有这个文件或目录 #include
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets - does not help
QT += widgets                                   - does not help
INCLUDEPATH += /opt/Qt/5.3/Src/qtbase/include/  - does not help

Qt 5.3. Ubuntu 14.04 x64.

4个回答

10

您需要仔细检查是否已经完成以下所有步骤:

  • 安装了模块

  • 大于(QT_MAJOR_VERSION, 4):QT += widgets

  • 重新运行了Qt 5 qmake。

话虽如此,我想提醒您包含整个模块并不是一个好主意,因为它包含所有与小部件相关的内容。尝试将其缩小到您真正需要的标头。


缩小范围是有效的。但我想学习如何编译必须编译的应用程序。-模块已安装和-您重新运行了Qt 5 qmake。我该如何检查它? - Ufx
@Ufx:运行/opt/Qt/5.3/Src/qtbase/bin/qmake... 或者在QtCreator中点击相应的上下文菜单选项。 - László Papp
还需要检查“模块已安装”。我该如何检查它? - Ufx
该目录已存在。 - Ufx
很难解释,因为你缺乏基础知识。不,你不应该检查/opt/Qt/5.3/Src/qtbase/include本身,而是要检查其中是否有QtWidgets目录... - László Papp

9

您可能已经注意到,Qt4和Qt5之间的Qt目录结构发生了变化。QWidget头文件已移至QtWidgets目录。请尝试添加以下内容:

INCLUDEPATH += /opt/Qt/5.3/Src/qtbase/include/QtWidgets

如果这不起作用,尝试手动查找标题,使用以下方法:
find /opt/Qt/5.3/Src/qtbase/ -name QWidget

将目录和其所在的INCLUDEPATH添加到路径中。

基于Final Contest的评论进行编辑。

我同意,解决方法通常不是一个好主意。为了测试QT安装程序在哪里查找qt5头文件和库,请创建一个最小化项目。

#include <QApplication>
#include <QtWidgets>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QWidget w;
    w.show();
    app.exec();
}

生成一个项目并添加 QT += widget。
/opt/Qt/5.3/Src/qtbase/bin/qmake -project

项目文件
######################################################################
# Automatically generated by qmake (3.0) Thu Jul 10 13:05:17 2014
######################################################################

TEMPLATE = app
TARGET = so_qtwidgets
INCLUDEPATH += .

QT += widgets

# Input
SOURCES += main.cpp

生成一个make文件。
/opt/Qt/5.3/Src/qtbase/bin/qmake

有趣的部件小部件标志添加:

  • 在我的情况下,将-I/usr/include/qt5/QtWidgets -I/usr/include/qt5/QtGui添加到INCPATH中
  • -DQT_WIDGETS_LIB添加到DEFINES变量。
  • -lQt5Widgets -lQt5Gui添加到libs中。

唯一可能不同的部分是QtWidgets和QtGui的路径。如果这些错误,则建议重新安装Qt。


它有助于解决那个错误。但现在出现了新的错误:QtWidgets/QtWidgetsDepends: No such file or directory #include <QtWidgets/QtWidgetsDepends>。我想我明白我需要做什么了。但为什么官方示例需要编辑呢?也许有一种方法可以在环境设置中包含所有qt目录? - Ufx
你确定 /opt/Qt/5.3/Src/qtbase 指向已安装的 Qt 库吗?我不会在该路径中期望看到 Src。在 Fedora 20 上,路径为 /usr/include/qt5/QtWidgets/。我不知道为什么 Qt 的文档中会有错误。这是我解决问题的方法。 - Tobias
2
明确指定包含路径是一个不好的想法。QT+=widgets 就是为了这个目的而存在的。此外,OP 没有使用 QWidget header,而是使用了 QtWidgets。我认为你可能会感到困惑。此外,即使你使用手动包含的解决方法,你仍然会遇到前面提到的问题,这将导致包含其他路径等问题。 - László Papp
添加了一个最小的小部件应用程序来帮助检查Qt安装。 - Tobias

3
在运行"make"之前,请检查您的".pro"文件的内容。我发现命令"qmake -project"自动生成的".pro"文件会引起相同的错误。现在,我通过以下命令编译了我的qt项目,错误消失了:
qmake my_project.pro
make

-1

这看起来非常像是错误的方式,我曾经在5.6版本中暂时遇到了同样的问题,但答案可能会更简单。

如果您正在加载许多示例,则可能首先到达编辑器或上次停留的位置。如果该示例是第一次加载,则需要进行“配置”,该选项位于项目侧选项卡下,应该呈现给您“配置”而不是“构建和运行”。它并不总是直接跳转到那里,但默认情况下包含没有支持的示例(例如桌面OpenGL和iOS)也是一个缺陷。

在完成此操作之前,它将无法解决任何超出立即项目范围之外的依赖项,因为所使用的库取决于使用哪个编译器/目标(例如MSVS、GNUCC、MinGW、32/64位)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接