Qt не видит файл ресурсов
Установлен 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 писал(а): Установлен 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, нет, файл дополнений не использовал. В моем случае, по крайней мере, с такого файла профита не было (в статье описано почему). Но, а чтобы добавить новые уровни я изменял файл, добавленный в ресурсы приложения.
Владимир, о спасибо на русском и с картинками, прямо для меня :)
Никто не пробовал подключить рекламу appodeal? И сильно ли при этом возрастает размер? Библиотека admob как я понял предустановлена на androide. С admob у меня очень печальный ctr..
Никто не проигрывал звуки (небольшие) в qt? Я хочу сделать это в java, чтобы не подключать QtMultimedia и не увеличивать объём. Но java у меня не видит файлы из ресурсов, пытался копировать файл из ресурсов, тоже не получается. Ни у кого никаких идей нету?
Test, что именно не получается при копировании файлов? Какие могут быть идеи, если ты не рассказываешь ничего. Может у тебя тупо нет прав на чтение файловой системы (в манифесте не прописаны).
копирование файла из ресурсов на устройство. Вот так не работает 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();
Наверное это из-за того что файл в ресурсах не до конца настоящий файл и не все функции из QFile для него допилены
Евгений, Да сейчас проверил действительно всё работает. Видимо раньше были проблемы в java коде, делал слишком рано soundPool.load("click.wav", 1) до того как скопировал файл. У меня программа не дебажится под андроид и даже не запускается под управлением qt, когда отладочный вывод выводится, почему-то и приходится на кофейной гуще иногда гадать)
Олександр, какую систему деплоя используешь, ант или градл? Желательно использовать последнюю. В настройках проекта можно это выбрать. После этого нажать кнопку Create Templates. Вообще эту кнопку, я думаю, стоит нажимать при обновлении версии Qt. По-идее, должно помочь
Такая тема использую для кисти картинку , задаю ее через QPixmap, на десктопе все ок, а на андроиде, что-то непойму как правильно прописать путь к картинке. Типа: sdcard0/image/pic.jpg не прокатывает. Испытываю на телефоне Dexp ixion xl5. Без флешки. sdcard0 выбрал , потому-что total commander мне такой путь рисует
Дмитрий, путь должен начинаться с символа "/". Это ж линукс. Плюс у тебя должны быть права на работу с файловой системой в манифесте прописаны.
Евгений, спасибо за ответ, про манифест что-то видел выше по теме, попробую разобраться.
Дмитрий, советую использовать Qt-шную систему ресурсов. И тогда вообще не придется париться с путями.
Александр, у меня ошибка пропала после снесения jdk. первый раз качала по ссылке с какого то гайда по установке всего этого геморроя. второй раз нашла jdk в гугле. JAVA_HOME не в системных переменных, а переменных среды пользователя, путь - jdk. также эта фигня потянула за собой жаву, ее можно засунуть в другое место если удобно. до этого переустанавливала много чего - ошибка исчезла именно после переустановки jdk. с твоего поста прошло 2 года, отписываюсь чтобы люди не сношались с этой херней по 3-4 дня.
Просто непонятно, почему Qt под Андроид после кучи версий такой корявый или багованный.
Читайте также: