Russian Qt Forum
Ноябрь 24, 2024, 02:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Help. Работа Qt c ресурсами и dll  (Прочитано 8124 раз)
cutwater
Гость
« : Сентябрь 01, 2007, 13:16 »

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

Если изображения хранятся в dll, как я могу их использовать при помощи Qt?

Или может быть лучше организовать работу со скинами по другому?

Заранее благодарен.
Записан
QCasper
Гость
« Ответ #1 : Сентябрь 01, 2007, 13:25 »

Можешь, просто сделай в своей дллке функцию, которая будет возвращать картинку.
Записан
cutwater
Гость
« Ответ #2 : Сентябрь 01, 2007, 13:52 »

Объясню теперь нормально что мне нужно. Ибо раньше не сумел.

У меня есть dll. В ней хранятся png рисунки, string table.. ...и т.п.

Как при помощи Qt загрузить динамически эту библиотеку.
Получить из нее картинку. И загрузить ее в скажем Lable.

То есть примерно виндовыми средствами это выглядело бы так..
Код:
HMODULE hSkinLib = LoadLibrary("Skin.dll");

HICON hIcon = LoadIcon(hSkinLib, MAKEINTRESOURCE(101));
char szText[256] = "";
LoadString(hSkinLib, 201, szText, 256);
Записан
QCasper
Гость
« Ответ #3 : Сентябрь 01, 2007, 21:43 »

не знаю, на сколько тебя устроит этот метод, но я делаю так. Сначала загружаю дллку (QLibrary::load()), потом резолвю функцию, которая вернет мне картинку QLibrary::resolve(), и собственно всё. Подобну вещь как HICON hIcon = LoadIcon(hSkinLib, MAKEINTRESOURCE(101)); в Qt нельзя применить, насколько мне изестно. Хотя!! Можно попробовать просто после загрузки библиотеки (QLibrary::load()) попробовать вывести куда-нибудь картинку, которая находится в ресурсах дллки. То есть, если в ресурсе дллки (при условии, что используется система ресурсов Qt) есть картинка, и ты знаешь ее имя, к примеру :images/megaimage.png, то в основной проге можно попробовать вывести куда-нибудь QPixmap(":images/megaimage.png"). Теоретически может сработать, хотя я сам не пробовал. Я, повторяю, писал в дллке функцию, которая явно возвращала мне картинку.
Записан
cutwater
Гость
« Ответ #4 : Сентябрь 01, 2007, 22:55 »

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

Спасибо, буду пробовать.
Записан
QCasper
Гость
« Ответ #5 : Сентябрь 02, 2007, 10:05 »

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

Спасибо, буду пробовать.

Впрочем тебе опять же никто не мешает использовать WinAPI совместно с Qt.
Записан
Lion
Гость
« Ответ #6 : Сентябрь 02, 2007, 11:23 »

Для поддержки различных языков в Qt есть встроенные средства и хранить таблицы перевода в dll нет никакой необходимости. Для хранения картинок в dll необходимо сделать qt плагин, в классе плагина сделать публичную функцию типа
Код:
QIcon getIcon(const QString &iconName) { return QIcon(QString(":/images/%1).arq(iconName)); }
И уже с её помощью получать доступ к ресурсам dll.
Записан
QCasper
Гость
« Ответ #7 : Сентябрь 02, 2007, 20:28 »

Для поддержки различных языков в Qt есть встроенные средства и хранить таблицы перевода в dll нет никакой необходимости. Для хранения картинок в dll необходимо сделать qt плагин, в классе плагина сделать публичную функцию типа
Код:
QIcon getIcon(const QString &iconName) { return QIcon(QString(":/images/%1).arq(iconName)); }
И уже с её помощью получать доступ к ресурсам dll.

а я разве не то же самое советовал?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 21.