将 QGuiApplication 更改为 QApplication 导致未解决的错误
Changed QGuiApplication to QApplication resulted in unresolved errors
之所以改,是因为需要用到QtWidgets。我一直在尝试构建该项目,但是我不断收到以下错误:
18:37:58: Starting: "C:\Qt\Tools\CMake_64\bin\cmake.exe" --build C:/Users/user/Desktop/build-project-Desktop_Qt_5_15_2_MinGW_64_bit-Debug --target all
[1/4 11.1/sec] Automatic MOC and UIC for target project
[2/3 1.4/sec] Building CXX object CMakeFiles/project.dir/main.cpp.obj
[3/3 2.0/sec] Linking CXX executable project.exe
FAILED: project.exe
cmd.exe /C "cd . && C:\Qt\Tools\mingw810_64\bin\g++.exe -g CMakeFiles/project.dir/project_autogen/mocs_compilation.cpp.obj CMakeFiles/project.dir/main.cpp.obj CMakeFiles/project.dir/project_autogen/EWIEGA46WW/qrc_qml.cpp.obj -o project.exe -Wl,--out-implib,libproject.dll.a -Wl,--major-image-version,0,--minor-image-version,0 C:/Qt/5.15.2/mingw81_64/lib/libQt5Quick.a C:/Qt/5.15.2/mingw81_64/lib/libQt5QmlModels.a C:/Qt/5.15.2/mingw81_64/lib/libQt5Qml.a C:/Qt/5.15.2/mingw81_64/lib/libQt5Network.a C:/Qt/5.15.2/mingw81_64/lib/libQt5Gui.a C:/Qt/5.15.2/mingw81_64/lib/libQt5Core.a -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
CMakeFiles/project.dir/main.cpp.obj: In function `main':
C:/Users/user/Desktop/project/main.cpp:9: undefined reference to `__imp__ZN12QApplicationC1ERiPPci'
C:/Users/user/Desktop/project/main.cpp:16: undefined reference to `__imp__ZN12QApplication4execEv'
C:/Users/user/Desktop/project/main.cpp:9: undefined reference to `__imp__ZN12QApplicationD1Ev'
C:/Users/user/Desktop/project/main.cpp:9: undefined reference to `__imp__ZN12QApplicationD1Ev'
collect2.exe: error: ld returned 1 exit status
我目前的main.cpp
如下:
#include <QtWidgets/QApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
qputenv("QT_QUICK_CONTROLS_STYLE", "Material");
qputenv("QT_QUICK_CONTROLS_MATERIAL_THEME","Dark");
qputenv("QT_QUICK_CONTROLS_MATERIAL_Primary","BlueGrey");
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
通过 Cmake 包含 Qt 文件是使用以下方法完成的:
find_package(QT NAMES Qt5 COMPONENTS Core Quick Qt5Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Quick REQUIRED)
target_link_libraries(project
PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Quick)
我真的不确定问题出在哪里,所以感谢您的帮助
原来我没有链接 Widgets 库。
target_link_libraries(project
PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Quick Qt${QT_VERSION_MAJOR}::Widgets)
之所以改,是因为需要用到QtWidgets。我一直在尝试构建该项目,但是我不断收到以下错误:
18:37:58: Starting: "C:\Qt\Tools\CMake_64\bin\cmake.exe" --build C:/Users/user/Desktop/build-project-Desktop_Qt_5_15_2_MinGW_64_bit-Debug --target all
[1/4 11.1/sec] Automatic MOC and UIC for target project
[2/3 1.4/sec] Building CXX object CMakeFiles/project.dir/main.cpp.obj
[3/3 2.0/sec] Linking CXX executable project.exe
FAILED: project.exe
cmd.exe /C "cd . && C:\Qt\Tools\mingw810_64\bin\g++.exe -g CMakeFiles/project.dir/project_autogen/mocs_compilation.cpp.obj CMakeFiles/project.dir/main.cpp.obj CMakeFiles/project.dir/project_autogen/EWIEGA46WW/qrc_qml.cpp.obj -o project.exe -Wl,--out-implib,libproject.dll.a -Wl,--major-image-version,0,--minor-image-version,0 C:/Qt/5.15.2/mingw81_64/lib/libQt5Quick.a C:/Qt/5.15.2/mingw81_64/lib/libQt5QmlModels.a C:/Qt/5.15.2/mingw81_64/lib/libQt5Qml.a C:/Qt/5.15.2/mingw81_64/lib/libQt5Network.a C:/Qt/5.15.2/mingw81_64/lib/libQt5Gui.a C:/Qt/5.15.2/mingw81_64/lib/libQt5Core.a -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
CMakeFiles/project.dir/main.cpp.obj: In function `main':
C:/Users/user/Desktop/project/main.cpp:9: undefined reference to `__imp__ZN12QApplicationC1ERiPPci'
C:/Users/user/Desktop/project/main.cpp:16: undefined reference to `__imp__ZN12QApplication4execEv'
C:/Users/user/Desktop/project/main.cpp:9: undefined reference to `__imp__ZN12QApplicationD1Ev'
C:/Users/user/Desktop/project/main.cpp:9: undefined reference to `__imp__ZN12QApplicationD1Ev'
collect2.exe: error: ld returned 1 exit status
我目前的main.cpp
如下:
#include <QtWidgets/QApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
qputenv("QT_QUICK_CONTROLS_STYLE", "Material");
qputenv("QT_QUICK_CONTROLS_MATERIAL_THEME","Dark");
qputenv("QT_QUICK_CONTROLS_MATERIAL_Primary","BlueGrey");
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
通过 Cmake 包含 Qt 文件是使用以下方法完成的:
find_package(QT NAMES Qt5 COMPONENTS Core Quick Qt5Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Quick REQUIRED)
target_link_libraries(project
PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Quick)
我真的不确定问题出在哪里,所以感谢您的帮助
原来我没有链接 Widgets 库。
target_link_libraries(project
PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Quick Qt${QT_VERSION_MAJOR}::Widgets)