Nano Hash - криптовалюты, майнинг, программирование

Как организовать файлы в папке qml.qrc в Qt Creator?

Если у меня есть куча ресурсов (изображения, шрифты и т. д.) в разных папках в моем файле qml.qrc, есть ли способ организовать это в Qt Creator?

Например, если в моем файле qml.qrc есть следующее:

<RCC>
    <qresource prefix="/">
        <file>main.qml</file>
        <file>pages/MainPage.qml</file>
        <file>pages/NewContactPage.qml</file>
        <file>images/plus.png</file>
        <file>images/minus.png</file>
        <file>images/exit.png</file>
    </qresource>
</RCC>

Он будет отображаться в виде длинного списка в Qt Creator, например:

Resources
    qml.qrc
        /
          main.qml
          pages/MainPage.qml
          pages/NewContactPage.qml
          images/plus.png
          images/minus.png
          images/exit.png

Поскольку этот список может стать очень длинным в течение всего проекта, было бы неплохо, если бы он был лучше организован и разделен на папки, как в моем каталоге. Любые идеи?

19.11.2014

  • Определите префиксы, префикс для каждого подкаталога, который у вас есть. Здесь вы используете только / в качестве префикса. Вместо этого используйте /images, /pages и так далее. Таким образом, разные папки будут отображаться как подкаталоги файла ресурсов внутри QtCreator. 19.11.2014
  • Идеальный! Это именно то, что мне нужно. Благодарю вас! 19.11.2014
  • Как я могу сгенерировать этот файл автоматически с помощью какого-либо скрипта? на данный момент я должен создать этот файл вручную, и здесь есть много файлов, которые нужно упомянуть, есть ли лучший способ создать этот файл автоматически со всеми ресурсами? 25.11.2020

Ответы:


1

Из документации Qt: Система ресурсов Qt

По умолчанию ресурсы доступны в приложении под тем же именем файла, что и в исходном дереве, с префиксом :/ или по URL со схемой qrc.

Также можно указать префикс пути для всех файлов в файле .qrc, используя атрибут префикса тега qresource:

этот пример показывает, как это сделать:

<RCC>
   <qresource prefix="/pages">
      <file >pages/MainPage.qml</file>
   </qresource>
   <qresource prefix="/images">
      <file >images/plus.png</file>
   </qresource>
</RCC>
20.11.2014
  • Это хорошо для 1 уровня организации папок, НО. Что, если я хочу, чтобы мой проект QT показывал мне папку в папке внутри папки, как это сделать? искал его на официальном сайте google / qt, не нашел упоминания! раздражающий. 14.07.2015
  • @ali-mofrad, разве это не создаст такие пути, как /pages/pages/MainPage.qml и /images/images/plus.png? 27.07.2015
  • @Zmey: да. Ты прав. если вы хотите удалить один слой, просто добавьте все файлы в одну папку и используйте несколько префиксов для их разделения. 31.01.2016
  • Этот метод в этом ответе работает, но: 1) он лучше сочетается с методом псевдонима, например здесь, а не при помещении всех файлов в одна папка файловой системы, как было предложено в последнем комментарии. 2) При создании, например. префиксы /a и /a/b с использованием этой техники, они отображаются как братья и сестры, а не как родитель-и-дочерний элемент в дереве проводника проекта, а имя последнего отображается как /a/b, а не просто b. 28.10.2016
  • :/something не будет работать для меня в Qt 5.7, только qrc:/something будет (иначе я получаю ошибку ":/something": no such directory) 02.11.2016

  • 2

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

    Это также эффективно улучшит организацию в дополнение к значительному сокращению времени сборки.

    03.01.2017
  • Похоже, что использование qtquickcompiler для обработки qrc дает лучшие результаты: он отделяет qml от не-qml. Я говорю об этом подходе: doc.qt.io/ QtQuickCompiler/ 26.03.2020

  • 3

    Я только что обнаружил удивительный способ сделать это. Что странно, так это то, что никто другой не предложил это, когда это так совершенно тривиально. Возможно, это не работало в старых версиях Qt/Qt Creator, но теперь работает.

    Вот:

    <RCC>
        <qresource prefix="/">
            <file>main.qml</file>
            <file>test/test.txt</file>
        </qresource>
    </RCC>
    

    Каталог test должен существовать и должен содержать test.txt.

    Нет необходимости создавать отдельные теги <qresource> с разными префиксами. Нет необходимости в атрибутах alias.

    Файлы четко организованы в файловой системе и в проводнике проекта и вы можете получить к ним доступ из кода с чистыми путями, такими как :/test/test.txt.

    скриншот

    (на этом снимке экрана показан проект, в котором также есть дополнительные файлы — игнорируйте их)

    Бонус: вы можете щелкнуть правой кнопкой мыши папку "test" в проводнике проекта в Qt Creator и выбрать "Добавить новый...", это поместит вновь созданный файл в нужное место в файловая система. К сожалению, он не отображается в поддереве qrc в проводнике проекта, а только в отдельном поддереве «Другие файлы». Вам нужно щелкнуть правой кнопкой мыши «qrc.qml» в проводнике проекта и выбрать «Добавить существующие файлы», чтобы файл появился в поддереве qrc, как и должно быть. Так что это немного глючит/грязно, но когда вы научитесь его использовать, это работоспособно.

    Бонус 2: вы можете импортировать (добавить) существующий файл/каталог (который находится в любом (под)подкаталоге файла qrc), и будет сгенерирован правильный синтаксис XML, в результате чего правильная древовидная структура в проводнике проекта.

    Что, по моему мнению, работает плохо:

    Редактировать: я только что заметил, что OP делает именно то, что я предлагаю. В этом случае он, вероятно, использует более старую версию Qt Creator. У меня 4.1.0.

    28.10.2016

    4

    Если вы хотите использовать файлы qrc, но вам не нравятся такие пути, как «images/icons/images/icons/icon.png/», используйте псевдоним, как описано здесь

    <qresource prefix="/images">
        <file alias="cut.png">images/cut.png</file>
    </qresource>
    

    С псевдонимом вы можете использовать свой файл, аккуратно написав /images/cut-img.png вместо /images/images/cut.png

    21.02.2016

    5

    Еще один хороший способ просмотреть файлы/папки вашего проекта в том виде, в каком они отображаются в вашей файловой системе, — сделать это:

    • Откройте свой проект
    • Нажмите на раскрывающееся меню над названием вашего проекта, как показано на изображении ниже:

    введите здесь описание изображения

    • Готово, теперь вы можете видеть свои файлы и папки в том виде, в котором они отображаются на вашей FS.
    14.07.2015
  • У этого как минимум 2 проблемы. 1) Вы не можете просматривать несколько открытых проектов в одном дереве. 2) чтобы добавить, удалить или переименовать файл в qrc, вам нужно снова переключиться в представление «Проекты». 28.10.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..