无法在 Qt C++ 程序中加载 qrc 文件

Posted

技术标签:

【中文标题】无法在 Qt C++ 程序中加载 qrc 文件【英文标题】:can't load qrc files in Qt C++ program 【发布时间】:2018-04-27 04:10:11 【问题描述】:

我正在尝试使用 qrc 将 css 文件加载到程序中。但在运行时出现以下错误:-

QIODevice::read (QFile, ":/css/stylesheet.qss"): device not open

我正在使用 Cmake 。这是我的项目结构:-

.
├── calculator.cpp
├── calculator.h
├── calculator.ui
├── CMakeLists.txt
├── CMakeLists.txt.user
├── css
│   └── stylesheet.qss
├── main.cpp
└── resources.qrc

cmake 文件:-

cmake_minimum_required(VERSION 3.9)

project(Calculator)

set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS  -Wall -Wpedantic -Wextra -std=gnu++14")

find_package(Qt5Widgets REQUIRED)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)


add_executable($PROJECT_NAME main.cpp calculator.cpp )
target_link_libraries(Calculator Qt5::Widgets)

这里是使用 qrc 文件的 main.cpp 文件:-

#include <QApplication>
#include <QFile>
#include "calculator.h"
#include <QtDebug>

int main(int argc,char **argv)

    QApplication *app= new QApplication(argc,argv);
//  Q_INIT_RESOURCE(resources);

    QFile css(":/css/stylesheet.qss");
    if(css.open(QIODevice::ReadOnly ))
    
        app->setStyleSheet(css.readAll());
        css.close();
    else
    
        qDebug("Failed") ;
        qDebug(css.readAll());
    

    Calculator *cal = new Calculator(nullptr);
    cal->show();

    return  app->exec();


这里是 resources.qrc 文件:-

<RCC>
    <qresource prefix="/">
        <file>css/stylesheet.qss</file>
    </qresource>
</RCC>

每当我尝试运行时,我都会得到以下输出:-

qt5ct: using qt5ct plugin
Failed
QIODevice::read (QFile, ":/css/stylesheet.qss"): device not open

我正在使用带有 QtCreator 的 Arch linux 和 gcc (GCC) 7.3.1。我是 cmake 和 Qt 的新手。

【问题讨论】:

【参考方案1】:

将资源添加到add_executable()

add_executable($PROJECT_NAME main.cpp calculator.cpp resources.qrc) // added qrc

【讨论】:

【参考方案2】:

请在您的 makefile 中添加您的 QRC 资源。

RESOURCES += resources.qrc

【讨论】:

抱歉,我使用的是 Cmake 而不是 Qmake。你能告诉我如何在 Cmake 中做到这一点吗? :) 查看 eyllanesc 答案。

以上是关于无法在 Qt C++ 程序中加载 qrc 文件的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Qt5/cmake 项目中加载 Qt 资源文件中指定的图像

如何在运行时生成的 QML 中加载图像(jpg)

在 Qt Creator 中加载具有相对路径的文件

QT软件开发之基础控件--2.3 QT资源文件

无法使用 Qt3D 查看/加载 .obj 文件,用 cpp 编写

如何在文件夹opencv&&qt c++中加载图像[关闭]