Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с динамическими ресурсами, работа с динамическими ресурсами 
:(
    Опции темы
olegkuzn
Дата 3.3.2016, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 1.10.2007

Репутация: нет
Всего: нет



Здравствуйте. Прошу помочь решить проблему.

Это содержимое файла ресурсов с расширением qrc
(из него откомпилирован файл ресурсов с расширением rcc)
Код

<RCC>
    <qresource prefix="/Navy">
        <file>Img/down.ico</file>
        <file>Img/left.ico</file>
        <file>Img/right.ico</file>
        <file>Img/up.ico</file>
    </qresource>
    <qresource prefix="/Feeling">
        <file>Img/happy.png</file>
        <file>Img/sad.png</file>
    </qresource>
    <qresource prefix="/Conf">
        <file>Img/config.png</file>
        <file>Img/query.png</file>
        <file>Img/update.png</file>
    </qresource>
    <qresource prefix="/Undo">
        <file>Img/redo.png</file>
        <file>Img/undo.png</file>
    </qresource>
</RCC>


Вот код программы в котором я пытаюсь динамически подключить ресурсы.
Код

//-------------------------------------------------------------
//  mainwindow.h
//  здесь вообще ничего интнресного
//-------------------------------------------------------------

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QAction>
#include <QToolBar>
#include <QIcon>

class MainWindow : public QMainWindow
{
    Q_OBJECT

private:
    QIcon*    m_pIcon;
    QAction*  m_pAction;
    QToolBar* m_pToolBar;

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
};

#endif // MAINWINDOW_H



Код

//-------------------------------------------------------------------
//  mainwindow.cpp
//
//-------------------------------------------------------------------

#include "mainwindow.h"
#include <QResource>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    // регистратция ресурсов (этот код отрабатывает bRegistered = true)
    bool bRegistered = QResource::registerResource(QString("D:\\qrc\\Res001.rcc"));

    // связываем ресурс с объектом класса QResource
    QResource myResource(":/Undo/undo.png");
    // выдается нулевой указатель почему-то
    const uchar* pChar = myResource.data();

    // пытаюсь таким образом связать иконку с ресурсом
    // скорее всего это неправильно
    m_pIcon  = new QIcon(":/Undo/undo.png");

    // далее в главном окне выводится ToolBar с кнопкой
    // кнопка картинки не имеет (хотя должна была)
    m_pAction = new QAction(*m_pIcon ,tr("Undo")   ,this);
    m_pToolBar = new QToolBar(this);
    m_pToolBar->addAction(m_pAction);

    addToolBar( Qt::TopToolBarArea, m_pToolBar);
}

MainWindow::~MainWindow()
{
    QResource::unregisterResource(QString("D:\\qrc\\Res001.rcc"));
}


Проблема в том что ресурсы не подключаются.
Я нигде не нашел примера работы с динамически подключаемыми ресурсами.
Подскажите как правильно работать с ресурсами. 
Если есть пример правильной работы с ресурсами - дайте ссылку на него.

Заранее спасибо за помощь.


PM MAIL   Вверх
math64
Дата 3.3.2016, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Можно создать dll или so - ресурсы будут загружаться полсе загрузки dll. А не откопмилированные ресурсы - обычные файлы. Парси qcc xml-парсером и загружай как обычные файлы.
PM   Вверх
olegkuzn
Дата 3.3.2016, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 1.10.2007

Репутация: нет
Всего: нет



В системе должно быть несколько приложений. 
Хотелось бы брать все иконки для QTooBar, QMenu и т.д. 
из одного файла ресурсов, а не хранить в каждом exe-файле.

Вы предлагаете делать dll, который будет содержать данные с ресурсов?
Наверное, если нет способа "одолеть" работу с rcc-файлами, то это выход. 

PM MAIL   Вверх
math64
Дата 4.3.2016, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



Наверняка у твоих приложений кроме ресурсов есть ещё общий код, который можно положить в dll, так что создание dll оправдано.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0771 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.