Как добавить файл в файл ресурсов

Обновлено: 05.07.2024

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

Создание файлов ресурсов

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

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

Ниже показан пример создания простой таблицы строк:

Утилита Resgen.exe

Для создания из ***.txt файла ресурсов можно воспользоваться специальной утилитой генерации файлов ресурсов Resgen.exe. Например, ввод следующей команды:

приведет к созданию файла MyResources.resources. Сгенерированный этой утилитой файл ресурсов далее можно либо добавить в сборку как внешний файл, либо вставить в сборку DLL или ЕХЕ. Утилита Resgen также поддерживает возможность создания файлов ресурсов в формате XML с расширением .resX. Применяется она очень просто:

Выполнение этой команды приведет к созданию XML-файла ресурсов по имени MyResources.resX.

Утилита Resgen поддерживает строго типизированные ресурсы. Строго типизированный ресурс представляется в виде класса, который получает доступ к ресурсам. Для создания такого класса в утилите Resgen предусмотрена опция /str:

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

Класс ResourceWriter

Вместо использования для создания файлов ресурсов утилиты Resgen можно написать специальную, позволяющую это делать программу. Класс ResourceWriter из пространства имен System.Resources служит для создания бинарных файлов ресурсов, а класс ResXResourceWriter — для создания файлов ресурсов на базе XML. Оба эти класса поддерживают возможность добавления изображений и любых других сериализуемых объектов. В случае применения класса ResXResourceWriter потребуется сослаться на сборку System.Windows.Forms.

В следующем примере кода демонстрируется создание объекта ResXResourceWriter по имени rw в файле Demo.resx. После создания экземпляра с помощью метода AddResource() класса ResXResourceWriter можно приступать к добавлению набора ресурсов общим объемом до 2 Гбайт. Первый аргумент в AddResource() позволяет указывать имя ресурса, а второй — значение. Ресурс изображения можно добавлять за счет применения экземпляра класса Image. Чтобы можно было использовать класс Image, необходимо сослаться на сборку System.Drawing, а также добавить директиву using для открытия пространства имен System.Drawing.

Здесь объект Image создается за счет открытия файла logo.jpg, поэтому потребуется либо скопировать этот файл изображения в каталог исполняемой программы, либо указать полный путь к нему в аргументе метода ImageToFile(). Оператор using указывает, что ресурс изображения должен автоматически уничтожаться в конце блока using.

Далее в объект ResXResourceWriter добавляются простые строковые ресурсы. В конце метод Close() класса ResXResourceWriter автоматически вызывает ResXResourceWriter.Generate() для осуществления записи ресурсов в файл Demo.resx:

Запуск этой небольшой программы приведет к созданию файла ресурсов Demo.resx с изображением logo.jpg внутри.

Использование файлов ресурсов

Добавьте в этот проект созданный ранее файл ресурсов Demo.resx, открыв в окне Solution Explorer контекстное меню и выбрав в нем пункт Add --> Add Existing Item (Добавить --> Добавить существующий элемент). По умолчанию для свойства Build Action (Действие при компоновке) этого ресурса будет установлено значение Embedded Resource (Встраиваемый ресурс), указывающее, что этот ресурс должен встраиваться в выходную сборку.

Далее в параметрах проекта (за счет выбора Application --> Assembly information (Приложение --> Информация о сборке)) следует установить в качестве значения параметра Neutral Language (Нейтральный язык) основной язык:

Установка нейтрального языка

Изменение значения этого параметра приведет к добавлению в файл assemblyinfо.cs атрибута [NeutralResourceLanguageAttribute], как показано ниже:

Установка значения для данного атрибута улучшит производительность ResourceManager, поскольку позволит ему быстрее отыскивать ресурсы для en-US, а также использовать их в качестве варианта по умолчанию. В этом атрибуте можно также указать место размещения используемого по умолчанию ресурса за счет применения второго параметра в конструкторе. С помощью перечисления UltimateResourceFallbackLocation можно указать, что он должен размещаться в главной сборке (значение MainAssembly) или же в подчиненной (значение Satellite).

После компоновки проекта можно просмотреть сгенерированную сборку утилитой ildasm и увидеть в манифесте атрибут, .mresource. Атрибут .mresource объявляет имя для ресурса в сборке. Если .mresource объявлен public (как в данном примере), это означает, что ресурс может экспортироваться из сборки и использоваться в классах других сборок. Если же .mresource объявлен private, это значит, что ресурс экспортироваться не может и доступен только в пределах данной сборки.

Для получения доступа к встроенному ресурсу используется класс ResourceManager, который находится в пространстве имен System.Resources. Конструктору этого класса в качестве аргумента можно передать имя сборки, в которой содержатся ресурсы.

В рассматриваемом примере ресурсы встроены в исполняемую сборку, поэтому во втором аргументе конструктору должен быть передан результат выполнения метода Assembly.GetExecutingAssembly(). В первом аргументе передается корневое имя ресурсов, состоящее из названия пространства имен и имени файла ресурсов, но без расширения resources. Как было показано ранее, это имя можно отобразить с помощью утилиты ildasm и просто удалить из него расширение resources. Имя можно также получить и программно с применением метода GetManifestResourceNames() класса System.Reflection.Assembly:

Для создания строго типизированного ресурса в редакторе управляемых ресурсов (Managed Resources Editor) можно изменить значение параметра Access Modifier (Модификатор доступа) с No Code Generation (Не генерировать никакой код) на Public (Общедоступный) или Internal (Внутренний). В случае установки значения Public генерируемый класс снабжается модификатором доступа public и тогда к нему возможен доступ из других сборок. При установке значения Internal генерируемый класс получает модификатор доступа internal и доступ к нему может осуществляться только изнутри сборки, в которой он находится.

Пространство имен System.Resources

Давайте кратко пройдемся по всем классам, которые содержатся в пространстве имен System.Resources и позволяют работать с ресурсами.

Класс ResourceManager

Может использоваться для получения ресурсов, относящихся к текущей культуре, из сборок или файлов ресурсов. С помощью ResourceManager можно получать сразу целый набор ресурсов для определенной культуры в виде экземпляра ResourceSet.

Класс ResourceSet

Позволяет представлять набор ресурсов для определенной культуры. При создании экземпляр ResourceSet он производит перечисление по классу, реализуя интерфейс IResourceReader, и сохраняет все ресурсы в HashTable.

Интерфейс IResourceReader

Используется в ResourceSet для перечисления ресурсов. Класс ResourceReader реализует этот интерфейс.

Класс ResourceWriter

Применяется для создания файла ресурсов и реализует интерфейс IResourceWriter.

Классы ResXResourceSet, ResXResourceReader и ResXResourceWriter

Похожи на классы ResourceSet, ResourceReader и ResourceWriter, но служат для создания не бинарного файла ресурсов, а не XML-файла .resx. Вместо того чтобы встраивать ресурс в XML-файл, они позволяют добавлять на него ссылку с помощью ResXFileRef.

Пространство имен System.Resources.Tools

Содержит класс StronglyTypedResourceBuilder, который можно использовать для создания класса из ресурса.

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

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


13.8k 12 12 золотых знаков 36 36 серебряных знаков 60 60 бронзовых знаков 155 2 2 золотых знака 2 2 серебряных знака 7 7 бронзовых знаков они ссылаются на файлы которые есть физически на компьютере. А мне нужно чтобы они были внедрены в сам проект.\ что показано на скриншоте и как это относится к вопросу? Как я понял, он хочет, что бы файлы были вшиты в программу и на стороне клиента не было в них нужны. @Grundy, а как ты ссылаешь на файле в коде? Мне казалось, что VS по умолчанию их в код зашивает.

Для добавления ресурсов в проект необходимо щелкнуть правой кнопкой мыши узел Свойства в проекте в Обозревателе решений, щелкнуть Открыть, а затем на странице Ресурсы в Конструкторе проектов нажать кнопку Добавить ресурс. Ресурсы можно добавить в проект в качестве связанных ресурсов (внешние файлы) или как внедренные ресурсы (внедренные непосредственно в файл RESX).

  • При добавлении связанного ресурса в файле RESX со сведениями о ресурсах проекта будет указан только относительный путь на файл ресурса на диске. Если в качестве связанных ресурсов добавить изображения, видео или другие сложные файлы, их можно будет изменять в редакторе по умолчанию, сопоставленном с соответствующим типом файла в конструкторе ресурсов.
  • В случае внедренных ресурсов, данные хранятся непосредственно в файле ресурсов проекта (RESX). Строки могут храниться только как внедренные ресурсы.

После добавления файлов в ресурсы, добавленные файлы помещаются в папку Resources, находящуюся в корне проекта.

Также можно задать действие при построении:

  • None — файл не включается в выходную группу проекта и не компилируется в процессе построения. Примером такого файла является текстовый файл документации, например файл Readme.
  • Compile — файл компилируется в выходные файлы построения. Эта настройка используется для файлов кода.
  • Content — файл не компилируется, но включается в выходную группу "Содержимое". Этот вариант используется по умолчанию для файлов HTM и других веб-файлов.
  • Embedded Resource — файл внедряется в основные выходные файлы построения проекта в виде DLL или исполняемого файла. Обычно это значение используется для файлов ресурсов.

Для задания свойства Действие при построении ( Build Action ) или свойства Копировать в выходной каталог( Copy to Output Directory ) необходимо зайти в свойства у файла ресурсов и изменить необходимое свойство.

Собственно говоря, Вас интересует свойство Действие при построении ( Build Action ) - которое необходимо указать под Ваши нужды.

Вы можете создать ресурсы для проекта, выполнив следующие действия.

Использование файла скрипта ресурсов.

Этот шаг необходим перед добавлением ресурсов.

Добавление ресурсов в проект и использование представление ресурсов.

Использование шаблона ресурса для создания настраиваемых ресурсов.

Использование файлов скриптов ресурсов

Перед созданием и добавлением новых ресурсов в проект необходимо сначала создать файл скрипта ресурсов (RC).

файл скрипта ресурсов можно добавить только в существующий проект, загруженный в Visual Studio IDE. Нельзя создать автономный скрипт ресурсов за пределами проекта, хотя файлы шаблона ресурсов (RCT) можно создавать в любое время.

Создание файла описания ресурсов

Установите фокус на существующую папку проекта в Обозреватель решений, например MyProject.

Не путайте папку проекта с папкой решения в Обозреватель решений. Если поместить фокус на папку решения , то вы не сможете добавлять новые элементы .

в меню выберите Project > добавить новый элемент.

Выберите папку Visual C++ и выберите файл ресурсов (. RC) в правой области.

Укажите имя файла скрипта ресурсов в текстовом поле имя и нажмите кнопку Открыть.

Открытие файла скрипта ресурсов

Вы можете просматривать ресурсы в файле скрипта ресурсов, не открывая проект. Файл скрипта откроется в окне документа, а не в представление ресурсов.

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

Чтобы открыть файл скрипта ресурсов за пределами проекта, в меню последовательно выберите пункты > Открыть файл и файл. Перейдите к файлу описания ресурсов, выделите его и нажмите кнопку Открыть.

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

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

Чтобы открыть несколько сценариев ресурсов, выполните описанные выше действия для каждого открываемого файла, например Source1. RC и source2. RC. Затем, когда оба RC-файла открыты в отдельных окнах документов, либо используйте меню окно , либо щелкните правой кнопкой мыши один из файлов и выберите пункт Новая группа горизонтальных вкладок или Новая группа вертикальных вкладок. Теперь окна выводятся мозаикой, чтобы их можно было просматривать одновременно.

Чтобы открыть файлы скриптов ресурсов, щелкните RC-файл правой кнопкой мыши в Обозреватель решений, выберите команду Открыть с помощью и выберите Редактор исходного кода (текстовый).

при создании приложения Microsoft Foundation Class (MFC) для Windows с помощью мастера приложений MFCмастер создает базовый набор файлов, включая файл скрипта ресурсов (rc), который содержит основные функции MFC. однако эти функции, относящиеся к mfc, недоступны при редактировании rc-файла для Windows приложений, не основанных на MFC. к ним относятся мастера кода, строки команд меню, содержимое списка для элементов управления "поле со списком" и размещение элемента управления ActiveX.

Чтобы добавить поддержку MFC с открытым файлом скрипта ресурсов, в представление ресурсов выделите папку Resources (например, MFC. RC). Затем в окно свойствзадайте для режима MFC значение true.

Кроме установки режима MFC, RC-файл должен быть частью проекта MFC. Установка режима MFC в значение true для RC-файла в проекте Win32 не предоставляет возможности MFC.

Создание ресурсов

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

Используйте окно представление ресурсов для просмотра файлов ресурсов, включаемых в проекты. При раскрытии верхней папки, например проект1. RC, отображаются типы ресурсов в этом файле. Разверните каждый тип ресурса, чтобы отобразить отдельные ресурсы этого типа.

чтобы открыть окно представление ресурсов , перейдите в меню вид > другие Windows > представление ресурсов или нажмите клавиши Ctrl + Shift + E.

Можно также щелкнуть правой кнопкой мыши окно представление ресурсов , чтобы открыть контекстное меню команд, или дважды щелкнуть строку заголовка, чтобы закрепить и открепить окно. Щелкните правой кнопкой мыши строку заголовка команд, управляющих поведением окна. дополнительные сведения см. в разделе управление Windows.

представление ресурсов windows включает диалоговое окно добавление ресурса со следующими свойствами для добавления ресурсов в проект приложения Windows классическое приложение с + +:

Можно развернуть категории ресурсов курсора и диалогового окна, чтобы открыть дополнительные ресурсы, расположенные в . \ Microsoft Visual Studio <version> \вк\вкресаурцетемплатес \<LCID > \мфк.ркт. Если необходимо добавить RCT Files, поместите их сюда или укажите другой путь включения. Ресурсы, отображаемые на верхнем уровне элемента управления "дерево", являются ресурсами по умолчанию, предоставляемыми Visual Studio. Ресурсы в RCT – файлах отображаются на втором уровне в соответствующей категории. Число файлов RCT, которые можно добавить, не ограничено.

При создании нового ресурса Visual C++ присваивает ему уникальное имя, например IDD_Dialog1 . Этот идентификатор ресурса можно настроить, изменив свойства ресурса либо в соответствующем редакторе ресурсов, либо в окно свойств.

Не указывайте имя или идентификатор ресурса, зарезервированного Visual Studio. Зарезервированные имена — DESIGNINFO , HWB и TEXTINCLUDE , а зарезервированный идентификатор — 255 .

Создание ресурса

В представление ресурсов выберите RC-файл, а затем используйте команду изменить > Добавление ресурса и выберите тип ресурса для добавления в проект.

Можно также щелкнуть правой кнопкой мыши RC-файл в представление ресурсов и выбрать в контекстном меню пункт Добавить ресурс .

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

Если у вас еще нет RC-файла в проекте, этот шаг создаст его. Затем можно повторить этот шаг, чтобы добавить конкретные типы ресурсов в новый RC-файл.

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

используйте меню Project > добавить ресурс.

Использование шаблонов ресурсов

Шаблон ресурса — это настраиваемый ресурс, сохраненный в виде RCT-файла. Затем шаблон ресурсов служит отправной точкой для создания ресурсов. Шаблоны ресурсов сохраняют время в разработке дополнительных ресурсов или групп ресурсов, совместно использующих функции, такие как стандартные элементы управления или повторяющиеся элементы. Например, если вы хотите включить кнопку "Справка" с значком логотипа компании в несколько диалоговых окон, создайте новый шаблон диалогового окна и настройте его с помощью кнопки "Справка" и логотипа.

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

Редактор ресурсов автоматически предоставляет уникальный идентификатор ресурса. При необходимости можно изменить свойства ресурсов .

Разместите зависящие от языка файлы шаблонов в подкаталогах основного каталога шаблонов. Например, файлы шаблонов только для английского языка переходят в папку.. \<каталог шаблонов ресурсов > \ 1033.

Visual Studio ищет новые rct-файлы в \program files \ Microsoft Visual Studio <version> \вк\вкресаурцетемплатес, \program files \ Microsoft Visual Studio <version> \вк\вкресаурцетемплатес \<> LCID (например, lcid 1033 для английского языка) или в любом месте пути включения. Если вы предпочитаете хранить RCT – файлы в другом расположении, необходимо добавить расположение в путь поиска включаемых файлов.

Создание и использование шаблона ресурса

В Обозреватель решений щелкните правой кнопкой мыши проект и выберите Добавить > Добавить новый элемент.

В области шаблоны: выберите файл шаблона ресурсов (. RCT).

Укажите имя и расположение для нового RCT -файла и нажмите кнопку Открыть.

Новый RCT -файл добавляется в проект и отображается в Обозреватель решений в папке ресурсов .

Дважды щелкните RCT -файл, чтобы открыть его в окне документа. Чтобы добавить ресурсы, щелкните правой кнопкой мыши файл в окне документа и выберите команду Добавить ресурс.

Вы можете настроить добавленные ресурсы и сохранить RCT – файл.

В области представление ресурсов щелкните правой кнопкой мыши RC -файл и выберите команду Добавить ресурс.

Щелкните знак «плюс» ( + ) рядом с ресурсом, чтобы развернуть узел ресурса и просмотреть доступные шаблоны для этого ресурса.

Дважды щелкните шаблон, который нужно использовать.

Добавленный ресурс можно изменить по мере необходимости в редакторе ресурсов.

Преобразование существующего файла ресурсов в шаблон

Откройте файл скрипта ресурсов и в меню выберите файл > Сохранить <filename> как. Укажите расположение и нажмите кнопку ОК.

Есть вопрос не для новичков
я написал функцию которая содаёт динамически ДатаТайбл, но я определяю зарание известный класс, она.

Как реализовать приложение для тестирования (вопрос/ответ)
Всем привет, я пока что андроид лузер, начал писать програмку с тестами так как тестов планируется.

Ответ на вопрос
Блин препод задал вопрос не знаю как ответить на него и почему такой ответ? вот вопрос: Какой.

Ответ на вопрос.
Вот задали мне с информатики написать програмку на паскале, чтобы она задавала вопрос, и.

Кириллица в ваших приложениях

Предположим у нас есть вот такая форма:

Нам бы хотелось что бы форма содержала кириллицу, первое что приходит в голову это добавить в проект сл код:

Добавили, компилируем, получаем:

согласитесь не красиво как-то, решается данная проблема сл способом: в функцию main (файл main.cpp) добавляем следующий код:

Естественно UTF-8 вы можете заменить на CP-1251 или любую другую необходимую вам кодировку

Не забываем так же подключить заголовочный файл:

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

Этим вы только упростите себе в будущем жизнь

Вот в этом архиве проект который расписан в данном вопросе: Cyrillic.rar

CheckListBox

В Qt нет столь замечательного виджета как CheckListBox, но не все так плохо как кажется, данный вопрос решается достаточно быстро и легко, для этого на форму добавляем виджет QListWidget. Теперь в конструктор формы с QListWidget добавим сл код:

В результате получаем вот это:

В результате получаем вот это:

что на мой взгляд немного удобнее

Перевод приложений на другие языки

И вот вы написали свое первое приложение и вы осознали что научить "разговаривать" приложение на других языках было бы очень хорошо, для это в Qt есть все необходимое. Если у вас установлен QtSDK то вы в полной боевой готовности, если же нет, то для решения данного вопроса вам понадобится два приложения QtCreator и QtLinguist. Будем считать что эти два приложения у вас установлены. Для примера я сделал приложение вот с такой формой:

Как видим все не по-нашенски, учим приложение великому и могучему, для этого в файл *.pro добавляем строчку

translateapp - имя файла перевода с которым будем в дальнейшем работать
ru_RU - идентификатор языка, желательно указывать его в виде (ru_RU, en_EN, by_BY) и т.д.
ts - расширение файла перевода

Добавить эту строку можно в конец файла, роли это не играет.

Теперь делаем следующее в QtCreator-e идем по пути Инструменты - Внешние - Linguist - Обновить перевод (lupdate) на англ это Update Translations (lupdate)

а в каталоге где лежат исходники появится файлик translateapp_ru_RU.ts.Имейте ввиду что в файл попадут только те строки из исходников, которые вы обернули функцией tr(). Теперь открываем приложение QtLinguist и в нем открываем только что сформированный файл получим что то подобное:

Думаю разобраться что, куда и как писать не составит труда, поэтом просто переводим приложение на необходимый язык, не забываем после перевода каждой строчки помечать ее переведенной, для это жмем кнопку на панели инструментов:

После того как перевели все строки сохраняем изменения в файле и делаем следующее: File- Release
В результате получаем файл: translateapp_ru_RU.qm находящийся рядом с файлом translateapp_ru_RU.ts. После перевода в QtLinguist файл с расширением qm можно получить и из QtCreator, для этого идем: Инструменты - Внешние - Linguist - Release Translations(lrelease)

Теперь давайте научим наше приложение использовать полученный файл, для этого скопируйте этот файл (*.qm) в каталог где у вас собирается приложение (Помните про теневую сборку?) после этого в функцию main добавим следующий код:

методу load передается имя файла перевода, который надо загрузить, QLocale::system().name() возвращает идентификатор языка, тот самый который мы указывали в имени файла (ru_RU, en_EN, by_BY), a - это экземпляр QApplications. Естественно вы можете расположить файлы перевода(*.qm) куда вам удобнее главное что бы вы могли передать их методу load

Не забываем подключить заголовочный файлы:

в результате после компиляции получим вот это:

Есть небольшие проблемы с тем что ваше приложение при компиляции в debug может не видеть файлы qm не смотря на то что вы положили их куда положено, тут два решения или забить на эту проблему или методу load передавать абсолютный путь к файлу, если же вы компилируете в release то данной проблемы нет.

Архив с тестовым проектом: TranslateApp.rar

Система плагинов для вашего приложения
Вставлю и я свои 5 копеек, расскажу немножко о работе с плагинами (не теми, которые используются QtCreator-ом, а теми, которые dll-кой лежат рядышком с программой и динамически подгружаются в приложение).

Для начала, создадим интерфейс для нашего плагина:

Здесь всё вроде бы понятно и просто: создаём интерфейс, с функцией "старт" - которая вернёт результат выполнения нашего модуля, и две функции, что бы понять, с чем же мы всё таки работаем, а именно: получение имени нашего плагина и получение версии плагина.

после объявления класса идёт объявление этого класса как интерфейса для плагина:

Q_DECLARE_INTERFACE(IModule, "my.super.puper.domenName/MyCoolProject/IModule/1.0.0");

Здесь мы передаём первым параметром имя нашего интерфейса, а вторым ставим уникальную строку, с помощью которой будет идентифицироваться наш интерфейс.

поехали дальше, реализовываем наш плагин. Для этого - создаём в солюшене проект, который на выходе нам даст динамическую библиотеку (как это делать, рассказывать не буду - звыняйте, лень. ) и добавляем в неё класс (в данном случае это будет FTP сервер):

здесь думаю то же всё предельно ясно и просто (на интерфейс IFtpServer - не обращайте внимание, это я как всегда коммерческими тайнами разбрасываюсь).
Основное внимание уделяем тому, что сразу после объявления класса идёт два макроса:
без запятых, точек с запятой и прочих разделителей, просто макросы! про Q_OBJECT - думаю всё понятно, а вот в Q_INTERFACES нужно передать имя интерфейса, который будет реализован в нашем плагине, в данном примере - это IModule.
Реализация проста и тривиальна, весь код приводить не буду, вот кусочек:
ftpServer.cpp
Единственное, что отличает этот "плагинистый" срр файл, от обыкновенного, это то, что после includе-ов идёт макрос:

которым мы говорим, что требуется экспортировать наш плагин и в качестве параметра передаём имя конкретной реализации нашего интерфейса, в данном случае это имя класса: sxFtpServer.

В принципе и всё - наш плагин готов к работе! компилируем и получаем на выходе dll-ку с плагином.

Теперь было бы логично использовать наш плагин. Для этого создаём ещё один проект, который из себя будет представлять консольное приложение. и в main файл или ещё куда добавляем что-то типа:

из Main-а или ещё откуда небудь вызываем нашу волшебную функцию и получаем проект, который будет загружать плагин и вызывать его start функцию.

В общем то и всё. для пущей важности добавлю наверное скриншот:

Да и последнее и очень важное: проект плагина и программы которая его вызывает должн, нет да же не так: ДОЛЖНЫ быть скомпилированы в одной конфигурации (либо оба в Debug-e либо оба в Release) иначе - работать не будет.

Собственно и всё, спасибо за внимание.
Критика и спасибки - приветствуются

если ругаеться на макрос

ЗЫ: Вспомнил ещё один момент - в интерфейсе плагина, мы декларируем его уникальный идентификатор, если плагин будет скомпилирован с одним идентификатором, а программа, которая будет вызывать этот плагин - с другим, то логично предположить, что плагин загрузиться не сможет.

Работаем с файлом ресурсов в QtCreator

Большинство приложений содержит в себе различного рода "дополнительны материал" в виде картинок звуков и т.п. Зачастую этот материал "вшит" в само приложение, хотя не исключаю и того что данный материал может лежать где то в директории приложения. Сейчас и разберем как "вшить" в свое приложение этот самый материал, и самое главное как им пользоваться в коде.

Для начала добавить в свой проект файл ресурсов Qt, для этого на проекте щёлкаем правой кнопкой мыши и выбираем пункт: "Добавить новый. ":

в появившемся мастере выбираем Qt и файл ресурсов Qt:

затем указываем расположение и имя файла:
расположение лучше всего указывать корень каталога проекта.

Жмём далее, указываем в какой проект добавить новый файл и завершаем мастер нажатием кнопки "Завершить":

В результате в проекте появится файл с расширением qrc, данный файл автоматически будет добавлен в pro файл проекта, поэтому имейте ввиду что если вы добавили ранее созданный файл ресурсов, то его надо подключить в файле проекта:

Как видим он пустой, прежде чем добавлять файлы, скопируйте их в каталог в котором расположен ваш проект, при этом файлы эти могу быть катализированы как вам угодно, например картинки вы можете положить в папку img, звуки в sounds и т.д. после того как все необходимое скопировали давайте добавим файлы в файл ресурсов. Для этого жмем кнопку "Добавить" и выбираем пункт "Добавить префикс":

префикс лучше всего выставлять как "/" дабы избежать длинных путей при работе с ресурсами в коде.
После того как добавили префикс, добавьте необходимые файлы, выбрав пункт "Добавить файлы", добавлять можно сразу выделив n-e количество файлов, в результате добавления у вас получится что то подобное:

Заметьте что в файл ресурсов указывается относительный путь к добавленному файлу, именно с ним вы и будете работать в дальнейшем, так же есть возможность указать "Псевдоним" файлу, это дает возможность обращаться к файлу указав только "Псевдоним", например: вы добавили файл "/img/log.jpg" если ему указать "Псевдоним" например "logo" то из кода можно обращаться к файлу по псевдониму. После всех внесенных файлов сохраните файл ресурсов (Ctrl + S) и приступим к работе с добавленными файлами.

Например поместим на кнопку иконку ранее добавленную в файл ресурсов, для этого переходим в сво-ва кнопку, ищем свойство "icon" открываем окно добавления ресурса:

в левой части окна выбирайте подкаталог где лежит ресурс (если он есть) справа будет отображаться ресурсы:

Если ресурсу задан "Псевдоним" то ресурс будет находится в <resource root>, хотя физически он будет там куда вы его положили. В правой части выбираем необходимое изображение и жмем Ок. Таким образом добавляются ресурсы с помощью GUI, через код это делается так:
например добавляем картинку в Label.

Все ресурсы хранятся в памяти в виде дерева объектов, если вам необходимо пройтись по всему дереву, то для этого можно использовать QDir инициализированный строкой ":/".

Если у вас есть двоичный файл ресурсов (расширение файла rcc), то его необходимо зарегистрировать в приложении:

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