QFile 测试 qrc 资源是否存在

QFile testing for existence of qrc resource

我在 Qt 论坛上看到 QFile::exists 可以用来测试图像资源是否存在。

在我的项目中我有很多图片,QML 文件中的引用之一是:

qrc:/images/ImageViewer/viewer_camera_rear2_off.png

我已经在 Qt Creator 中检查过并且资源存在且正确,我已经向 C++ 添加了一个名为 checkImage 的函数:

QString Manager::checkPath(QString path) {
    bool valid = false;

    if ( path.length() > 0 && path.indexOf(".") > 0 ) {
        const QString QRCprefix("qrc:");

        if ( path.startsWith(QRCprefix) != true ) {
            const QString imgsPath("/images/");

            if ( path.startsWith(imgsPath) != true ) {
              path = imgsPath + path; /*Thank you @WilliamMiller*/
            }
            path = QRCprefix + path;
        }
        valid = QFile::exists(path);
    }
    return (valid == true) ? path : "";
}

我已经在 Qt Creator 中对此进行了调试,QFile::exists returns 错误,我知道图像和引用是正确且存在的绝对事实,Qt 开发人员的信息也是如此论坛错了?

我也试过将 QRC 前缀更改为:

    qrc:/
    qrc://

结果还是一样 QFile::exists returns false.

不要使用 qrc 前缀。
来自文档:

Using Resources in the Application
在应用程序中,大部分地方都可以使用资源路径代替普通的文件系统路径。特别是,您可以将资源路径而不是文件名传递给 QIcon、QImage 或 QPixmap 构造函数:

cutAct = new QAction(QIcon(":/images/cut.png"), tr("Cu&t"), this);

请参阅 Application 示例,了解使用 Qt 的资源系统存储其图标的实际应用程序。

我在 Qt Developer 论坛上看到 "qrc:/" 的替代方法是只使用“:/”,因此新的 URI 是:

    :/images/ImageViewer/viewer_camera_rear2_off.png

现在QFile::exists returns 真的,世界上一切都好:)