【发布时间】:2020-11-23 10:21:47
【问题描述】:
我的项目如下所示:
.
├── CMakeLists.txt
└── src
├── CMakeLists.txt
├── main.cpp
└── radon
├── main.qml
├── qml.qrc
├── radon.cpp
└── radon.h
src/CMakeList.txt 定义了两个目标,一个库和一个链接到该库的可执行文件。
# only relevant code shown
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
find_package(Qt5 5.15 REQUIRED COMPONENTS Core Quick REQUIRED)
add_library(RadonCore
radon/radon.h
radon/radon.cpp
radon/qml.qrc
)
target_link_libraries(RadonCore
PUBLIC Qt5::Core Qt5::Quick)
add_executable(RadonApp
main.cpp)
target_link_libraries(RadonApp
PRIVATE RadonCore)
该库仅包含我的应用程序的入口点,main.cpp 仅调用该入口。
// header
#ifndef RADON_RADON_H
#define RADON_RADON_H
namespace radon{
int radon_entry(int argc, char* argv[]);
}
#endif //RADON_RADON_H
// source
#include "radon.h"
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int radon::radon_entry(int argc, char* argv[])
{
// only relevant code shown
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
const QUrl url(QStringLiteral("qrc:/main.qml"));
engine.load(url);
return QGuiApplication::exec();
}
// main.cpp
#include "radon/radon.h"
int main(int argc, char* argv[])
{
return radon::radon_entry(argc, argv);
}
使条目独立于main() 的想法是,我可以将库链接到具有自己的main() 的测试。但是配置下qt报找不到main.qml
QQmlApplicationEngine failed to load component
qrc:/main.qml: No such file or directory
如果我在radon.cpp 内提供main() 并将其构建为可执行文件,那么它可以正常工作。什么给了?
qml.qrc 看起来像这样:
<RCC>
<qresource prefix="/">
<file>main.qml</file>
</qresource>
</RCC>
【问题讨论】: