带有CMake和AUTORCC的Qt资源文件 [英] Qt resources files with CMake and AUTORCC

查看:110
本文介绍了带有CMake和AUTORCC的Qt资源文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

解决方案

add_executable()语句中添加资源文件

(不在 add_library()中)

无法设置主窗口图标。

注释


  • 当我不使用 AUTORCC 时,我会遇到一些编译问题:
    QtCore / qglobal.h:没有这样的文件或目录。但是,我确实更喜欢将AUTORCC作为一种更现代的CMake方法。

  • When I don't use AUTORCC I run into some compilation problems: QtCore/qglobal.h: no such file or directory. But, I do prefer AUTORCC as a more modern CMake approach.

没有AUTORCC(与提供的CMakeLists.txt不同)和Qt-4.6.2当前代码有效。
个不同的CMakeLists.txt)

Without the AUTORCC (different CMakeLists.txt than the provided) and Qt-4.6.2 the current code worked. different CMakeLists.txt)

这是我项目的最小化代码。树:

This is a minimized code of my project. Tree:

|- 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 <QMainWindow>

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 <QApplication>
#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})

// NOTE: it would be more convenient to be able to add the
// resource file here upon the creation of the library
add_library(mylib main_window.cpp)

// SOLVED
// BEFORE: add_executable(qt_test main.cpp)
add_executable(qt_test main.cpp resources/resources.qrc)

target_link_libraries(qt_test
    mylib
    ${QT_LIBRARIES}
)

resources / resources.qrc

<!DOCTYPE RCC><RCC version="1.0">
    <qresource>
        <file>images/logo.png</file>
    </qresource>
</RCC>

编辑

这是生成的 qrc_resources.cxx

#include <QtCore/qglobal.h>

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

System

CentOS-5, Qt-4.8.6, CMake-3.2.1, gcc-4.8.2

推荐答案

我认为您需要链接qrc_resources生成的文件。

I think you need to link qrc_resources generated file.

我想您知道下一个信息:

I suppose you know the next info:

http://www.cmake .org / cmake / help / v3.0 / manual / cmake-qt.7.html

在哪里可以看到下一行:

Where you can see the next line:

add_executable(myexe main.cpp resource_file.qrc)

更多信息:

http://www.cmake.org/cmake/help/v3.0/prop_tgt/AUTORCC.html

这篇关于带有CMake和AUTORCC的Qt资源文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆