静态QT编译问题

时间:2017-03-28 17:18:48

标签: 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

1 个答案:

答案 0 :(得分:1)

这个问题与静态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
  

我尝试过添加   INCLUDEPATH = "/Volumes/BackupSG/StaticQT/qt-everywhere-opensource-src-5.8.0/qtbase/include"

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

最后,路径<QtGui/QAction>无效。这是Qt 4的延续,但即使在那里也没有必要:它应该只是<QAction>。将其更改为<QAction>即可进行设置。如果生成了该文件(看起来像它),那么您正在尝试重用Qt 4中的uic输出:不要这样做。 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自己的源和生成的输出会破坏该规则,但由于技术原因而不适用于您自己编写的代码。

相关问题