0

QFile::exists画像リソースの存在をテストするために使用できるQt フォーラムを読みました。

私のプロジェクトにはたくさんの画像があります.QMLファイルの参照の1つは次のとおりです。

qrc:/images/ImageViewer/viewer_camera_rear2_off.png

Qt Creator をチェックインしましたが、リソースは存在し、正しいものです。checkImage という関数を C++ に追加しました。

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::existsfalse を返しました。画像と参照が正しく存在するという絶対的な事実を知っているので、Qt 開発者フォーラムの情報は間違っていますか?

また、QRC プレフィックスを次のように変更してみました。

    qrc:/
    qrc://

結果は同じですが、QFile::exists は false を返します。

4

2 に答える 2

2

qrcプレフィックスを使用しないでください。
ドキュメントから:

アプリケーションでのリソースの使用
アプリケーションでは、通常のファイル システム パスの代わりに、ほとんどの場所でリソース パスを使用できます。特に、ファイル名の代わりにリソース パスを QIcon、QImage、または QPixmap コンストラクターに渡すことができます。

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

Qt のリソース システムを使用してアイコンを格納する実際のアプリケーションについては、アプリケーションの例を参照してください。

于 2020-03-24T11:24:24.793 に答える
0

Qt 開発者フォーラムで、「qrc:/」の代わりに「:/」を使用することを読んだので、新しい URI は次のようになります。

    :/images/ImageViewer/viewer_camera_rear2_off.png

今 QFile::exists は true を返し、すべてが正しいです :)

于 2020-03-24T11:25:01.140 に答える