Qt не видит файл ресурсов

Обновлено: 06.07.2024

Установлен Qt 5.8.0.
Проблема появилась ещё в R8, в R7 все нормально.
Проблема именно на 64-битной версии, на 32-битной этой проблемы нет.
Нужные заголовочники-либы установленны! Программа компилируется, просто Qt не хочет их видеть.

Проблема явно не в Qt, пробовал разные версии, опять же повторю - R7 все нормально, так же как и в 32-битной версии, в OpenSUSE все нормально, проблема где то в ROSA.
Только не предлагайте скопировать в папку Qt все заголовочники, этот кустарный метод хоть и сработает но это сами понимаете что так не должно быть, Qt не хочет с системы подхватывать заголовочники.

Как решить эту проблему?

Всмысле не правильно? На более старых роса да и на suse, все работает, а тут я значит путь не правильно указываю? Почему эта ошибка появилась ещё в роса r8, эта проблема только в роса в других дистрах и старых росах такой чуши нет.

Qt всегда сам из системы все подхватывал, повторю ещё раз: эта фигня появилась ещё в ROSA R8 на 64-битной версии, на 32-битных все само подхватывает из системы так как это и должно быть в принципе.

Можете по подробнее?

Последний раз редактировалось Satana_00 30 апр 2017, 22:51, всего редактировалось 1 раз. Особенность Мандривы/Росы в том, что 64-битные либы называются как lib64qt*-devel, а не libqt*-devel. Может быть, в этом дело? Сила воли — это масса воли умноженная на ускорение воли. Особенность Мандривы/Росы в том, что 64-битные либы называются как lib64qt*-devel, а не libqt*-devel. Может быть, в этом дело?

Причем здесь lib64qt*-devel, если речь идет о встроенных либах с++, Qt все свое прекрасно видит.
Ведь в R7 небыло такой чуши и все прекрасно было.

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

Последний раз редактировалось Satana_00 30 апр 2017, 22:57, всего редактировалось 1 раз. библиотеки находятся в /lib64 и /usr/lib64, без указания пути ищет в /lib tverskoy писал(а): библиотеки находятся в /lib64 и /usr/lib64, без указания пути ищет в /lib Qt 64-битный и ищет он там где надо. Обратите внимание на скриншот.

Satana_00 писал(а): Установлен Qt 5.8.0.
Проблема появилась ещё в R8, в R7 все нормально.
Проблема именно на 64-битной версии, на 32-битной этой проблемы нет.
Нужные заголовочники-либы установленны! Программа компилируется, просто Qt не хочет их видеть.

Проблема явно не в Qt, пробовал разные версии, опять же повторю - R7 все нормально, так же как и в 32-битной версии, в OpenSUSE все нормально, проблема где то в ROSA.
Только не предлагайте скопировать в папку Qt все заголовочники, этот кустарный метод хоть и сработает но это сами понимаете что так не должно быть, Qt не хочет с системы подхватывать заголовочники.

Как решить эту проблему?

У меня на R8.1 проблемы такой нету. Даже переход по F2 работает. В R9 действительно баг есть. Проверил на свежеустановленной системе. А напишите точный порядок воспроизведения ошибки. Программы-то в репозиториях как-то собрались, значит компилятор все нашел. keleg писал(а): А напишите точный порядок воспроизведения ошибки. Программы-то в репозиториях как-то собрались, значит компилятор все нашел.

Речь идет не про компилятор, а про IDE (qt-creator). IDE не видит системных заголовочных файлов, например iostream.

Воспроизвести просто. Объявите любую системную библиотеку (не Qt, а из C++) и посмотрите как IDE себя поведет. Будет ли она давать подсказки из этого файла?

Сравните результаты с IDE которая была в R8.1 (возможно на чистом R8.1 такой же баг, так что лучше на R7)

Еще раз обращаю внимание, что речь идет только о IDE. В при самой сборке все include подключаются корректно. Точнее, на том примере что я тестировал. Пока, к сожалению, R9 не пользуюсь, не могу точно сказать где еще проявляется баги, я только пытаюсь помочь автору этого топика. Ну и конечно же мне это тоже в последствии скажется.

Что за ерунда? Имеется проект с Cmake на борту. я его открываю в Qt Creator(версия 3.5 с чем-то по моему). Открываю с помощью открытия файла CMakeLists.txt в корне проекта.

Всё хорошо, всё компилится и работает. Но вот в Qt никак не отображаются файлы .h

Как мне сделать так, чтобы в дереве проекта они отображались?

ЧЯДНТ? Гугль не помог(даже не подозреваю, куда гуглить надо)


а в cmakelists.txt они точно есть?


include_directories(.) возможно, это то, что тебе нужно.


в include_directories() прописана вся папка с хедерами. но в креаторе не видно ни одного хедера


да, есть. иначе бы не компилилось, и юзаю include_directories()


не помогает этот метод


Хедеры нужно добавлять в цели компиляции. Типа такого:


правильно я понимаю?

1) ДОписываем по Вашему экзамплу в проект.

2) Прогоняем cmake по-новой

3) Хедеры появляются в дереве проекта. Всё верно?


Ну, да. Я не помню деталей уже, но вроде это все что требуется.


попробуй что oh-la-la предложил на одном хедере и расскажешь, чем закончится :)


Спасибо большое! Это работает! Теперь внимание другой вопрос : можно ли так подключить все хедеры из этой папки(включая хедеры из вложенных папок) ? Просто руками всё это очень долго будет писать : там много хедеров


Qtc, в отличии от того же CLion, ничего ни за кого не выдумывает.

Поэтому показывает только те файлы, которые добавленны как сорцы к цели. Если ты хочешь показывать хидеры - либо добавь их к соответсвующей цели, как исходники, либо сделай фейковую цель, и добавь их к ней.


google:// glob cmake

Помниться ты уже поднимал такую тему.


нет, Вы меня с кем-то путаете. За ссылку спасибо большое


Проблема решена посредством применения File(GLOB ..) и add_executable.

Буду дальше знакомиться с cmake.

Если кто предложит более хорошее решение - буду рад его узнать.

Проблема решена посредством применения File(GLOB ..) и add_executable.
Буду дальше знакомиться с cmake.
Если кто предложит более хорошее решение - буду рад его узнать.
Решено!

Тут проблема не в CMake, а в том, что QtCreator не считает заголовочные файлы, отсутствующие в CmakeLists.txt частью проекта. Существует альтернативная реализация менеджера проектов CMake для QtCreator, возможно там поведение другое.

m0rph ★★★★★ ( 07.09.15 23:49:38 )
Последнее исправление: m0rph 07.09.15 23:50:17 (всего исправлений: 1)


CMake это кроссплатформа, поэтому, в той же студии - проблема повториться. А также в Code::Blocks, KDevelop(если они всё не испортили), Eclipse, и любой другой фигне, где кто то не насмотрелся на Jb и не накостылил.

Qtc в данном случае прав. Ибо фактически, нигде нет инфо об инклудах, их можно конечно, показыать наугад, все подряд, но качественно показывать только то, что используется в текущей конфиграции не выйдет, без дополнительного анализа кодовой базы, что в принципе разные задачи с управлением проектом и сборкой.


Проблема решена посредством применения File(GLOB ..) и add_executable

Дурацкое решение. Захочешь добавить новый файл - надо перезапускать cmake, и это не единственный минус.

Сам я вместо добавления файлов в add_executable добавлял фейковую цель, которая не собирается.

Понадобилось мне резко увеличить возможности QtE5 в связи с полученным заказом по изготовлению приложения обработки данных с тепловизора. В связи с этим решил я добавить графических возможностей в QtE5. Ниже то, что получилось добавить.

Ресурсы Qt

Основная идея проста. Прочитать файл ресурсов в память, получив указатель на начало. Однако, в связи с тем, что ресурсы могут быть разные, и, главное, что их может быть много, встает вопрос, как в этом буфере памяти понять, где начинается один ресурс, или заканчивается другой. Однако, Qt всё делает за нас. Имеется универсальный механизм доступа, к ресурсам. Пример: Qpixmap.load(“:icons/exit_icon.ico”). Двоеточие в начале строки говорит о том, что файл грузится из ресурса. Таким образом, как обратится к ресурсу понятно (можно подробнее почитать в документации к Qt), а вот как его (ресурс создать и загрузить) – это проблема.

Создание ресурса. Для этого используем компилятор ресурсов rcc.exe входящий в состав Qt. Структура исходного файла ресурса описана в документации Qt. В качестве примера приведем файл описания ресурса для нашей демо программы.

Это файл: t.qrc

Таким образом, у нас получился файл t.rcc который содержит в сжатом виде наши два файла PNG.

Загрузка ресурса. Есть две почти одинаковых возможности загрузить файл ресурсов. Один способ чисто Qt, второй D + Qt. Разница, как будет видно далее, небольшая.

Способ 1: чистый Qt в QtE5:

Фактически, создаем объект работы с ресурсом и просим его загрузить файл ресурсов. Если на выходе Истина (true), то ресурс загружен. Далее просто обращаемся к ресурсу через двоеточие.

Способ 2: D + Qt в QtE5:

QPixmap и Qbitmap

Следующий пример я срисовал с интернета. Цель: получить строку, на которую вместо цвета натянута фактура (в примере PNG файл).

Все манипуляции делаются в методе Paint, который вызывается на событие PaintWidget. Не буду останавливаться на том, как включить данное событие. Рассмотрим то, что происходит в Paint методе. В демо он называется runPaint(…).

Более подробно можно почитать в инете, где народ на форумах обсуждает данные моменты. Еще одно замечание: не обязательно смотреть С++ примеры. С таким же успехом можно смотреть примеры на python (PyQt5) и т.д.

Посмотрел ради интереса на Lazarus (паскаль). Интересная штука. Попробовал прикрутить к нему (к паскалю) QtE5. Работает!

Посмотрел Go. Там тоже есть работа с Qt (правда 4.7), но проработка значительно сильнее, чем у меня, хотя подход такой же. Методов там раз в 10 больше, чем у меня.

Ну а главное достоинство QtE5 в том, что новые методы и классы вполне можно добавить самому, при этом не нужно ставить кучу дополнительного софта типа Cmake, и т.д и т.п. Достаточно одного QtCreator.

Владимир Сергеевич

Name, нет, файл дополнений не использовал. В моем случае, по крайней мере, с такого файла профита не было (в статье описано почему). Но, а чтобы добавить новые уровни я изменял файл, добавленный в ресурсы приложения.

Сергей Жемойтель

Владимир, о спасибо на русском и с картинками, прямо для меня :)

DELETED

Никто не пробовал подключить рекламу appodeal? И сильно ли при этом возрастает размер? Библиотека admob как я понял предустановлена на androide. С admob у меня очень печальный ctr..

DELETED

Никто не проигрывал звуки (небольшие) в qt? Я хочу сделать это в java, чтобы не подключать QtMultimedia и не увеличивать объём. Но java у меня не видит файлы из ресурсов, пытался копировать файл из ресурсов, тоже не получается. Ни у кого никаких идей нету?

Евгений Хрюкин

Test, что именно не получается при копировании файлов? Какие могут быть идеи, если ты не рассказываешь ничего. Может у тебя тупо нет прав на чтение файловой системы (в манифесте не прописаны).

DELETED

копирование файла из ресурсов на устройство. Вот так не работает QFile:copy(name1, name2), так тоже File(name1) File.copy(name2). Получилось вот так:
QFile file(":/sounds/Click_Bomb.wav");
file.open(QIODevice::ReadOnly);
ba = file.readAll();
file.close();
QFile new_sound("click.wav");
new_sound.open(QIODevice::WriteOnly | QIODevice::Truncate);
new_sound.write(ba);
new_sound.close();

DELETED

Наверное это из-за того что файл в ресурсах не до конца настоящий файл и не все функции из QFile для него допилены

Евгений Хрюкин

DELETED

Евгений, Да сейчас проверил действительно всё работает. Видимо раньше были проблемы в java коде, делал слишком рано soundPool.load("click.wav", 1) до того как скопировал файл. У меня программа не дебажится под андроид и даже не запускается под управлением qt, когда отладочный вывод выводится, почему-то и приходится на кофейной гуще иногда гадать)

Евгений Хрюкин

Олександр, какую систему деплоя используешь, ант или градл? Желательно использовать последнюю. В настройках проекта можно это выбрать. После этого нажать кнопку Create Templates. Вообще эту кнопку, я думаю, стоит нажимать при обновлении версии Qt. По-идее, должно помочь

Aleksandr Davletbaev

Дмитрий Свободный

Такая тема использую для кисти картинку , задаю ее через QPixmap, на десктопе все ок, а на андроиде, что-то непойму как правильно прописать путь к картинке. Типа: sdcard0/image/pic.jpg не прокатывает. Испытываю на телефоне Dexp ixion xl5. Без флешки. sdcard0 выбрал , потому-что total commander мне такой путь рисует

Евгений Хрюкин

Дмитрий, путь должен начинаться с символа "/". Это ж линукс. Плюс у тебя должны быть права на работу с файловой системой в манифесте прописаны.

Дмитрий Свободный

Евгений, спасибо за ответ, про манифест что-то видел выше по теме, попробую разобраться.

DELETED

Дмитрий, советую использовать Qt-шную систему ресурсов. И тогда вообще не придется париться с путями.

Иван Иванов

Диана Волкова

Александр, у меня ошибка пропала после снесения jdk. первый раз качала по ссылке с какого то гайда по установке всего этого геморроя. второй раз нашла jdk в гугле. JAVA_HOME не в системных переменных, а переменных среды пользователя, путь - jdk. также эта фигня потянула за собой жаву, ее можно засунуть в другое место если удобно. до этого переустанавливала много чего - ошибка исчезла именно после переустановки jdk. с твоего поста прошло 2 года, отписываюсь чтобы люди не сношались с этой херней по 3-4 дня.

Forrest Gump

Forrest Gump

Forrest Gump

Просто непонятно, почему Qt под Андроид после кучи версий такой корявый или багованный.

Читайте также: