使用cmake复制所有qt资源

时间:2015-11-08 12:14:30

标签: c++ qt cmake qml

我想使用cmake编译qml应用程序。 这是我的cmake文件:

cmake_minimum_required(VERSION 3.3)
project(QMLTest)
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp)

find_package(Qt5Widgets REQUIRED)
find_package(Qt5Quick REQUIRED)

add_executable(QMLTest main.cpp)
include_directories(${Qt5Widgets_INCLUDES})
add_definitions(${Qt5Widgets_DEFINITIONS})
qt5_use_modules(QMLTest Widgets Quick )

和main.cpp:

#include <QGuiApplication>
#include <QQuickView>

int main(int argc, char** argv)
{
    QGuiApplication app(argc, argv);
    QQuickView view;
    view.resize(800, 480);
    view.setResizeMode(QQuickView::SizeRootObjectToView);
    view.setSource(QUrl::fromLocalFile("gui/MainWidnow.qml"));
    view.show();
    return app.exec();
}

当我尝试编译它时,我收到一个错误:

  

gui / MainWidnow.qml:找不到文件。

如何将所有qt资源复制到应用程序目录中?

3 个答案:

答案 0 :(得分:3)

我建议不要将QML文件复制到应用程序目录中,而是建议使用Qt的资源系统(1),它允许您将QML文件等资源直接嵌入可执行文件中。为此,您需要首先创建一个资源文件,例如resources.qrc来注册您的应用程序资源:

<!DOCTYPE RCC>
<RCC version="1.0">
    <qresource>
        <file>gui/MainWindow.qml</file>
    </qresource>
</RCC>

然后将资源文件添加到CMake配置中。这将从资源文件中创建一个源文件,您需要将其包含在应用程序源中:

qt5_add_resources(RCC_SOURCES resources.qrc)
add_executable(QMLTest ${RCC_SOURCES} main.cpp)

完成此操作后,您可以使用:/gui/MainWindow.qml格式的文件URL来引用此资源,该资源现已嵌入应用程序二进制文件中。 Qt会自动为您解决:

view.setSource(QUrl(":/gui/MainWindow.qml"));

Qt文档中有关于部署QML应用程序的更多细节(2)。

答案 1 :(得分:1)

我想延长接受的答案。 我会把它写成评论,但我没有声誉。

可以使用Qt独立的CMAKE函数调用而不是qt5_add_resources()

set(CMAKE_AUTORCC ON)
add_executable(myexe main.cpp resource_file.qrc)

然后您可以使用:/file_relative_to_qrc

来引用这些文件

答案 2 :(得分:0)

有多种方法可以做到这一点,例如:

add_custom_target(copy-runtime ALL
    COMMAND cmake -E copy ${CMAKE_SOURCE_DIR}/gui/MainWindow.qml
        ${CMAKE_BINARY_DIR}
    DEPENDS QMLTest)

我没有测试过,但你会明白这个想法。另一种选择是例如使用CMake的install命令在本地使用“make install”安装运行时文件。但是,在这种情况下,最好的选择是使用Qt的资源系统,如ajshort在他的回答中推荐的,并将所需的文件嵌入到可执行文件中。