Файлы ресурсов Qt с CMake и AUTORCCC++

Программы на C++. Форум разработчиков
Anonymous
 Файлы ресурсов Qt с CMake и AUTORCC

Сообщение Anonymous »

Проблема
Не удалось установить значок главного окна.
Примечания:
  • Когда я не использую AUTORCC, у меня возникают проблемы с компиляцией:

    Код: Выделить всё

    QtCore/qglobal.h: no such file or directory. Но я предпочитаю AUTORCC как более современный подход CMake.
    
    [*]Без AUTORCC (другой CMakeLists.txt, чем предоставленный) и Qt- 4.6.2 текущий код работал.
    разный CMakeLists.txt)
    
    [/list]
    КодЭто минимизированный код моего проекта. Дерево:
    |- CMakeLists.txt
    |- main_window.hpp
    |- main_window.cpp
    |- main.cpp
    |- resources
    | - resources.qrc
    | - images
    | - logo.png
    
    main_window.cpp

    Код: Выделить всё

    #ifndef MAINWINDOW_HPP
    #define MAINWINDOW_HPP
    
    #include 
    
    class MainWindow : public QMainWindow
    {
    Q_OBJECT
    public:
    MainWindow();
    };
    
    #endif
    
    main_window.cpp

    Код: Выделить всё

    #include "main_window.hpp"
    
    MainWindow::MainWindow()
    {
    // i tried ":/images.png", ":/resources/images/logo.png", ":/logo.png"
    setWindowIcon(QIcon(":images/logo.png"));
    }
    
    main.cpp

    Код: Выделить всё

    #include 
    #include "main_window.hpp"
    
    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);
    
    app.setOrganizationName("Organization");
    app.setApplicationName("Application Example");
    MainWindow mainWin;
    mainWin.show();
    
    return app.exec();
    
    CMakeLists.txt.

    Код: Выделить всё

    cmake_minimum_required(VERSION 3.1)
    
    project(qt_project)
    
    set(CMAKE_AUTOMOC ON)
    set(CMAKE_AUTORCC ON)
    find_package(Qt4 4.6 REQUIRED)
    
    set(QT_USE_QTGUI TRUE)
    set(QT_USE_QTXML TRUE)
    
    include(${QT_USE_FILE})
    add_definitions(${QT_DEFINITIONS})
    
    add_library(mylib main_window.cpp)
    add_executable(qt_test main.cpp)
    
    target_link_libraries(qt_test
    mylib
    ${QT_LIBRARIES}
    )
    
    resources/resources.qrc

    Код: Выделить всё

    
    images/logo.png
    
    
    
    Изменить
    Это сгенерированный файл qrc_resources.cxx

    Код: Выделить всё

    #include 
    
    static const unsigned char qt_resource_data[] = {
    // /users/ddakop/dev/misc/qt/resources/images/logo.png
    // ... removed hex data
    };
    
    static const unsigned char qt_resource_name[] = {
    // images
    // ... removed hex data
    // logo.png
    // ... removed hex data
    
    };
    
    static const unsigned char qt_resource_struct[] = {
    // :
    0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1,
    // :/images
    0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2,
    // :/images/logo.png
    0x0,0x0,0x0,0x12,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,
    
    };
    
    QT_BEGIN_NAMESPACE
    
    extern Q_CORE_EXPORT bool qRegisterResourceData
    (int, const unsigned char *, const unsigned char *, const unsigned char *);
    
    extern Q_CORE_EXPORT bool qUnregisterResourceData
    (int, const unsigned char *, const unsigned char *, const unsigned char *);
    
    QT_END_NAMESPACE
    
    int QT_MANGLE_NAMESPACE(qInitResources_resources)()
    {
    QT_PREPEND_NAMESPACE(qRegisterResourceData)
    (0x01, qt_resource_struct, qt_resource_name, qt_resource_data);
    return 1;
    }
    
    Q_CONSTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qInitResources_resources))
    
    int QT_MANGLE_NAMESPACE(qCleanupResources_resources)()
    {
    QT_PREPEND_NAMESPACE(qUnregisterResourceData)
    (0x01, qt_resource_struct, qt_resource_name, qt_resource_data);
    return 1;
    }
    
    Q_DESTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qCleanupResources_resources))
    
    Система
    CentOS-5, Qt-4.8.6, CMake-3.2.1, gcc-4.8.2

    Подробнее здесь: https://stackoverflow.com/questions/294 ... nd-autorcc

Вернуться в «C++»