c++ - 静态QT编译问题

标签 c++ macos qt

我在 QT Creator 中创建了一个应用程序,并试图用它构建一个可分发的 mac 应用程序,但我不断收到此错误:

./mainwindow.h:4:10: fatal error: 'QMainWindow' file not found
#include <QMainWindow>
         ^
1 error generated.

首先我cd到项目构建目录文件夹并调用 qmake 的静态编译版本:

/Volumes/StaticQT/qt-everywhere-opensource-src-5.8.0/qtbase/bin/qmake -config release /PathOfFoo.pro

然后我运行 make并收到上面突出显示的错误。我试过添加:

INCLUDEPATH = "/Volumes/BackupSG/StaticQT/qt-everywhere-opensource-src-5.8.0/qtbase/include"

到 .pro 文件以指定它应该从哪里绘制东西。我不确定是 qmake/make 没有找到正确的目录还是什么。

注意:我对非静态版本也有同样的问题。

关于如何解决这个问题的任何想法?我已经阅读了其他几个关于此的问题,但它们大多都是针对旧版本的 qt。

编辑:原始问题通过添加 QT += widgets 的答案解决了到 .pro 文件,并在遇到另一个类似问题之前进一步编译:

/$paths/ui_mainwindow.h:13:10: fatal error: 'QtGui/QAction' file not found
#include <QtGui/QAction>
         ^
1 error generated.

根据对 this question 上已接受答案的评论, make 失败的步骤确实有 -I<PATH_TO_QT5_INSTALL>/QtWidgets .

最佳答案

问题与静态Qt 无关。您的项目文件不包含必要的 widgets模块:

# Foo.pro
QT += widgets
TEMPLATE = app
TARGET = Foo
SOURCES += ...
HEADERS += ...
# etc

修复此问题后,重新运行 qmake,因为不会自动检测到对项目文件的此类更改。

如果你想支持 Qt 4,你需要这样的东西:

QT += gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

I've tried adding INCLUDEPATH = "/Volumes/BackupSG/StaticQT/qt-everywhere-opensource-src-5.8.0/qtbase/include"

不要那样做。你有 qmake 为你做这件事。如果没有,则仅表示您的项目文件已损坏。

最后,路径<QtGui/QAction>是无效的。它是 Qt 4 的遗留物,但即使在那里也没有必要:它应该只是 <QAction>。 .将其更改为 <QAction>你会被设置。如果生成了该文件(看起来像),则您正在尝试重用 uic Qt 4 的输出:不要那样做。 Qt 5 的 uic永远不会生成那条线。添加.ui文件到项目,并去掉 ui_foo.h文件:

# Foo.pro
...
FORMS += foo.ui bar.ui

根据经验,您的项目应该只包含两种形式的 Qt:

#include <QtModule>
#include <QClass>

#include <QtModule/QClass>   // Don't! Use <QClass> instead
#include <QtModule/qclass.h> // Don't! Use <QClass> instead
#include <qclass.h>          // Don't! Use <QClass> instead

请注意,Qt 自己的源代码和生成的输出违反了这条规则,但这是出于技术原因,不适用于您自己编写的代码。

关于c++ - 静态QT编译问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43075930/

相关文章:

C++ Eigen 库 : Cast for fixed sized Matrices

macos - 升级到 macOS Sierra Apache 无法启动/停止/重新启动

c++ - 如何使用 QDeclarative 将 QMap 公开给 QML

c++ - C++中的不明确访问错误

c++ - 为什么我应该在结构而不是类中为 priority_queue 重载 () 运算符?

c++ - 从上方找到 vector 中最接近值的优雅方法

macos - 删除 SSH key 终端

objective-c - 如何避免图像重定位使用带有 HTML 内容的 NSSharingService 发送电子邮件

c++ - 如何在 Qt5 中创建/读取/写入 JSON 文件

regex - 使用 TextInput 的 IP 地址掩码