QFile тестирование на наличие ресурса qr c - PullRequest
0 голосов
/ 24 марта 2020

Я читал на форумах Qt, что QFile::exists можно использовать для проверки существования ресурса изображения.

В моем проекте у меня много изображений, одна из ссылок в файле QML: to:

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 возвращает false, я точно знаю, что изображение и ссылка верны и существуют, так что информация на форуме разработчиков Qt неверна?

Я также пытался изменить QR C префикс к:

    qrc:/
    qrc://

Результат все тот же QFile :: существующие возвращает false.

Ответы [ 2 ]

2 голосов
/ 24 марта 2020

Не используйте префикс qrc.
Из документов:

Использование ресурсов в приложении
В приложении пути к ресурсам можно использовать в большинстве мест вместо обычных путей файловой системы. В частности, вы можете передать путь ресурса вместо имени файла конструктору QIcon, QImage или QPixmap:

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

См. Пример Application для реального приложения, которое использует Qt Система ресурсов для хранения своих иконок.

0 голосов
/ 24 марта 2020

Я читал на форуме Qt Developer, что альтернативой "qr c: /" является использование просто ": /", поэтому новый URI:

    :/images/ImageViewer/viewer_camera_rear2_off.png

Теперь QFile :: существует возвращает истину и все правильно в мире:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...