10 сентября 2019 г. 5:49

Не возможно получить файлы из ресурсов в qrc

Всем привет.
Имеется ресурсный файл, в нем есть ресурс index.html
Так он добавлен в нем

        <file>www/index.html</file>

В крестовом коде есть ображение к этому файлу

if(!path.size()) path = "index.html";
    QFile *file = new QFile(QString(":/www/") + path);

Но почему то файл не находится, то есть проверке на наличие файла мы получаем провал.
Может кто подскажет куда стоит копать для обнаружения ошибки?
Спасибо.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
25
QString("qrc:///www/") + path

not exists "qrc:///www/index.html"
Не получилось и так(

Пересобрать полностью не пробовал?

  • 10 сентября 2019 г. 6:07

Для уточнения, раньше использовался qmake, теперь cmake. Интересно что именно только с этим ресурсом трабла, в других проектах ресурсы находятся без проблем.
Так что не думаю что в этом проблема.

возможно, что стоит вручную алиас на файл прописать. Как вообще в редакторе выглядит xml того ресурсного файла?

Вообще он стандартный, как и все другие ресурсы. И пересобирать пробовал, ошибка по другому выглядит после.

<RCC>
    <qresource prefix="/">
        <file>www/index.html</file>
    </qresource>
</RCC>

Попробуйте полностью весь путь прописать , вот пример как я делал

Попробовал полный путь прописать, так же не помогло. Чувствую что где т ов другом месте проблема. А вот где не понятно...
Файл как и остальыне ресурсы к каталоге www присутствуют.

папке проекта на диске они есть?

Выше ответил.

ресурсы добавились в .pro файле ?

например 
RESOURCES += \
    resources/icons.qrc \

Вот весь проектный файл

cmake_minimum_required(VERSION 3.10)
project(webserver)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

find_package(Qt5Core        REQUIRED)
find_package(Qt5SerialPort  REQUIRED)
find_package(Qt5Quick       REQUIRED)
find_package(Qt5Network     REQUIRED)
#find_package(Qt5QuickCompiler       )

set(REQUIRED_LIBS
        Qt5::Core
        Qt5::Network
        )

set(RCC_RESOURCES
        www.qrc
        )

set(SOURCE_FILES
        httpserver.cpp
        httpsocket.cpp
        httpparser.cpp
        websocket.cpp
        objectserver.cpp
        )

add_library(${PROJECT_NAME} ${SOURCE_FILES} ${RCC_RESOURCES})

target_link_libraries(${PROJECT_NAME} PUBLIC ${REQUIRED_LIBS})
  • 10 сентября 2019 г. 8:21

При генерации проекта вылетает такое сообщение
C++ Indexer: Skipping file "/home/blin/projects/build-vhd5000gui-Desktop-Debug/webserver/webserver_autogen/EWIEGA46WW/qrc_www.cpp" because it is too big.
Не может ли быть проблема в этом? Так как это как раз данного файла касается.

А сразу не могу это написать? Конечно, в этом.

В QMake можно заюзать недокументированный функционал для очень больших qrc файлов следующим образом.

CONFIG += resources_big

Для CMake нужно каким-то образом написать аналог этого флага. Не помню, через set наверное добавляй.

Интересно что в qmake версии проектника что ыбла такого не было. Без этого работало.

Интересно что в qmake версии проектника что ыбла такого не было. Без этого работало.

Это уже не интересно, почему работало или не работало. Это зависит от объёма доступной памяти на ПК. Значит у тебя звёзды так сложились, что в этот раз тебе памяти на рабочем ПК не хватило для компиляции этого ресурсника. Либо добавили недавно новые файлы, которые сильно увеличили объём ресурсника.

Все таки это ошибка как оказалось ен та, это ошибка qt а не проблема с самими ресурсами.

А точнее?

Ну эта ошибка в исходниках Креатора. Типа выжирает всю память. Из за этого и добавили макрос.
Но все таки у меня ситуация другая, index.html в этом ресурсном файле не обнаруживается при запуске веб страницы.

Попробуй тогда сделать внешний ресурсник. Помнишь, как я в бтл делал. Скомпилировать отдельно, а потом уже подключать в проекте.

Нет, не вариант. Это переделка, а нужно заставить работать в таком состоянии как и работало раньше.

Так я не понял, ты использовал настройку resources_big или нет? С ней также не находит?

И причём здесь креатор, если сборку можно запустить из консоли и будет таже самая проблема.
Или ты забыл, что в бтл сборка со smoke тестами производилась без использования креатора и из-за больших ресурсных файлов также валилась с ошибками?
Поэтому я переделал ресурсы во внешние, чтобы не собирать их при каждой сборке.

Кстати, вот пример для CMake с этой настройкой

set(SOURCES main.cpp)
qt5_add_big_resources(SOURCES big_resource.qrc)
add_executable(myapp ${SOURCES})

Вопрос лишь в работопособности

  • 10 сентября 2019 г. 13:50
  • Ответ был помечен как решение.

Ошибка найдена и оказалась в другом, раньше данные ресурсы не были в преокте как в библиотеке, а просто через файл *.pri цеплялись. Теперь вынисли это все уже как отдельная библиотека.
И в этом самая загвоздка и оказалась.
Чтобы работало надо в конструктор добавить Q_INIT_RESOURCE(www); www имя файла без расширения, и только тогда это становистя работоспособным.

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Ищу работу?
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы

ЮА
17 сентября 2019 г. 8:51
Юлия Александрова

C++ - Тест 001. Первая программа и типы данных

  • Результат:33баллов,
  • Очки рейтинга-10
ЮА
17 сентября 2019 г. 8:36
Юлия Александрова

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:10баллов,
  • Очки рейтинга-10
ВД
16 сентября 2019 г. 11:47
Виктор Дзенькив

C++ - Тест 002. Константы

  • Результат:75баллов,
  • Очки рейтинга2
Последние комментарии
17 сентября 2019 г. 6:07
Misha Lebedev

Кстати интересные темы нашёл тут https://emacsway.github.io/ru/django-framework/#django-models Может что полезного тоже Евгений найдёте
17 сентября 2019 г. 4:50
Misha Lebedev

Доброго времени суток. Спасибо за хороший ответ, У меня ситуация така что в галлереи будет несколько миллионов фотографий с фильтрами и тегами , и я опасаюсь за производительност . Это ос…
17 сентября 2019 г. 3:23
Евгений Легоцкой

Добрый день. Да, я тоже читал ту статью в своё время и согласен с тем, что внешние ключи гораздо лучше, чем GenericForeignKey. Выборки в ряде случае работают быстрее. Но лично мне про…
14 сентября 2019 г. 17:08
Misha Lebedev

Приветствую вас Евгений , давно наблюда за развитием вашего замечательного портала, много полезно тут нашел , переодически зачитываюсь. Теперь по сушеству, делаю портал и там идеально ложи…
10 сентября 2019 г. 16:38
Евгений Легоцкой

function view для модели Article и LikeDislike.LIKE будет выглядеть так def like(request, pk): obj = Article.objects.get(pk=pk) try: likedislike = LikeDislike.objects.get(cont…
Сейчас обсуждают на форуме
p
17 сентября 2019 г. 5:02
pstMem

Да, действительно нужно дебажить, по другому не словить исключение. Уже решил проблему, был выход за предел массива, не правильные входные данные, так что всегда проверяйте размер массива.
17 сентября 2019 г. 3:39
Евгений Легоцкой

Добрый день! На удалённом сервере вряд ли. Этот класс из core модуля, а удалённый сервер - это ещё и network модуль нужно подтягивать. Тут на удалэнном сервере нужно делать программу…
17 сентября 2019 г. 3:30
Евгений Легоцкой

Добрый день! Попробуйте toHex() А также создние QString с помощью from методов. Может быть QString::fromLatin1(). В документации на QString почти два десятка методов from, один из них…
m
16 сентября 2019 г. 13:54
mihamuz

Однозначно PostgreSql не ниже 10 ки.
R
16 сентября 2019 г. 7:09
RED_Spider

прочитайте https://doc.qt.io/archives/qt-5.11/osx-deployment.html QMAKE_POST_LINK += "~/Qt/5.12.0/clang_64/bin/macdeployqt $${TARGET}.app $$escape_expand( \\n\\t )"
EVILEG
О нас
Услуги
© EVILEG 2015-2019
Рекомендует хостинг TIMEWEB