Я пытаюсь создать графический интерфейс для набора файлов C ++, которые я пишу, и я решил попробовать Qt. Однако попытка скомпилировать файлы, к которым я добавил компоненты Qt, оказалась сложной. Я использую Clang, с вызовом
clang++ -std=c++0x -stdlib=libc++ -framework QtGui F/Users/[uname]/Qt5.1.0/5.1.0/clang_64/lib -I/Users/[uname]/Qt5.1.0/5.1.0/clang_64/include -L/Users/[uname]/Qt5.1.0/5.1.0/clang_64/lib -o QT qt.cpp
И это работает, если я включу только
#include "QtGui/QGuiApplication"
Кажется, что я должен быть должен использовать, хотя,
#include <QtGui/QApplication>
который терпит неудачу с ошибкой
fatal error: 'QtGui/QApplication' file not found
Если я попытаюсь включить файл qpushbutton.h,
#include "QtWidgets/QPushButton"
Я получаю ошибку:
clang++ -std=c++0x -stdlib=libc++ -framework QtGui -F/Users/[uname]/Qt5.1.0/5.1.0/clang_64/lib -I/Users/[uname]/Qt5.1.0/5.1.0/clang_64/include -L/Users/[uname]/Qt5.1.0/5.1.0/clang_64/lib -v -o QT qt.cpp
Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin11.4.2
Thread model: posix
"/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.7.0 -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name qt.cpp -pic-level 2 -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 136 -v -resource-dir /usr/bin/../lib/clang/4.2 -F/Users/[uname]/Qt5.1.0/5.1.0/clang_64/lib -I /Users/[uname]/Qt5.1.0/5.1.0/clang_64/include -fmodule-cache-path /var/folders/lw/wq_l1f1936q0dmc1b_tkp94m0000gn/T/clang-module-cache -stdlib=libc++ -std=c++0x -fdeprecated-macro -fdebug-compilation-dir "[path]" -ferror-limit 19 -fmessage-length 204 -stack-protector 1 -mstackrealign -fblocks -fobjc-runtime=macosx-10.7.0 -fobjc-dispatch-method=mixed -fobjc-default-synthesize-properties -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o /var/folders/lw/wq_l1f1936q0dmc1b_tkp94m0000gn/T/qt-YxX3PY.o -x c++ qt.cpp
clang -cc1 version 4.2 based upon LLVM 3.2svn default target x86_64-apple-darwin11.4.2
ignoring nonexistent directory "/usr/include/c++/v1"#include "..." search starts here:
#include <...> search starts here:
/Users/[uname]/Qt5.1.0/5.1.0/clang_64/lib (framework directory)
/Users/[uname]/Qt5.1.0/5.1.0/clang_64/include
/usr/bin/../lib/c++/v1
/usr/local/include
/usr/bin/../lib/clang/4.2/include
/usr/include
/System/Library/Frameworks (framework directory)
/Library/Frameworks (framework directory)
End of search list.
"/usr/bin/ld" -demangle -dynamic -arch x86_64 -macosx_version_min 10.7.0 -o QT -lcrt1.10.6.o -L/Users/[uname]/Qt5.1.0/5.1.0/clang_64/lib -framework QtGui /var/folders/lw/wq_l1f1936q0dmc1b_tkp94m0000gn/T/qt-YxX3PY.o -lc++ -lSystem /usr/bin/../lib/clang/4.2/lib/darwin/libclang_rt.osx.a -F/Users/[uname]/Qt5.1.0/5.1.0/clang_64/lib
Undefined symbols for architecture x86_64:
"QArrayData::deallocate(QArrayData*, unsigned long, unsigned long)", referenced from:
QTypedArrayData<unsigned short>::deallocate(QArrayData*) in qt-YxX3PY.o
"QPushButton::QPushButton(QString const&, QWidget*)", referenced from:
_main in qt-YxX3PY.o
"QPushButton::~QPushButton()", referenced from:
_main in qt-YxX3PY.o
"QString::fromAscii_helper(char const*, int)", referenced from:
QString::QString(char const*) in qt-YxX3PY.o
"QWidget::show()", referenced from:
_main in qt-YxX3PY.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Я также пробовал qmake, который завершается с ошибками из тех же пропущенных символов в архитектуре x86_64, что и выше, с файлом qt.pro
QT += core
QT += gui
SOURCE += qt.cpp
Сам файл qt.cpp является просто примером:
#include <QtGui/QApplication>
#include <QtGui/QPushButton>
int main(int argc, char* argv[]){
QApplication app(argc, argv);
QPushButton but ("Button");
but.show();
return app.exec();
}
Файлы, с которыми я работаю, должны быть скомпилированы в стандарте C ++ 11, и я действительно не хочу переключать IDE, поэтому Qt Creator не является идеальным решением (Qt Creator также генерирует ошибку отсутствующих символов).
Я уверен, что есть что-то очевидное, что мне не хватает, но мне нужно продолжить работу над аспектами проекта без использования графического интерфейса как можно скорее.
Я использую Mac OS 10.7.5 на MacBook Air 64bit. Я установил Qt5.1.0 из установщика Mac, предложенного на сайте Qt. Моя версия clang ++ — 4.2 (clang-425.0.28), установленная с помощью инструментов командной строки в XCode.
Заранее спасибо.
Похоже, вы пытаетесь построить с Qt 5, где виджеты были перемещены в QtWidgets.
Вот почему вам нужно изменить включения из QtGui в QtWidgets.
Кроме того, вам нужно добавить «виджеты» в Qt. Кроме того, core и gui присутствуют по умолчанию, поэтому вы должны написать: QT + = виджеты в этом конкретном сценарии.
Не уверен, исправит ли это вашу проблему, связанную с архитектурой, но эти вещи, по крайней мере, неверны.
Других решений пока нет …