Russian Qt Forum

Qt => Общие вопросы => Тема начата: Jeka от Июль 30, 2013, 15:12



Название: Как сохранить результаты работы плагина в главном приложении?
Отправлено: Jeka от Июль 30, 2013, 15:12
Добрый день. Мое приложение подгружает несколько плагинов, которым необходимо обмениваться некоторой информацией.
Пытался делать вот так:

Код:

class iface                                                     // Класс интерфейса
{  

public:
    virtual ~iface(){}
    virtual void set_container(Сontainer *data) = 0;
};
Q_DECLARE_INTERFACE(iface,"com.mysoft.app.iface/1.0")

class Container                                                // Класс с данными
{
public:
      void set_data(int key, QVariant data);          // сеттеры геттеры
      QVariant get_data(int key);
private:
      QMap <int,QVariant> m_data;                    // здесь хранятся данные
}
class MainWindow
{
private:
        Container *m_data_class;                       // класс с  данными который передаю в подключаемый плагин                
                                                                    

        void load_plugins();                                // функция загрузки плагинов
}

void MainWindow::load_plugins()
{
        plugin_path =                                       //Путь к плагину
        ...
        QPluginLoader loader(plugin_path);

        iface *pi = qobject_cast<iface*>(loader.instance());

        pi->set_container(m_data_class);        // Передаю указатель на класс данных
}

void SomePluginClass::set_container(Container *data)
{
        data->set_data(1,"Hello!!!");                //Ошибка            
}


Попытка обращения к методам и членам класса MainWindow приводит к ошибке:

/home/jeka/QtPro/Plugin4/App/App: symbol lookup error: /home/jeka/QtPro/Plugin4/plugins/libplugin.so: undefined symbol: _ZN9container8set_dataEi8QVariant

но если у меня в классе MainWindow есть QStandardItemModel то к объектам этой модели я могу получить доступ, например к методу
QTreeWidgetItem->text().

Подскажите как сделать сохранение временной информации?


Название: Re: Как сохранить результаты работы плагина в главном приложении?
Отправлено: Old от Июль 30, 2013, 15:42
Все же написано.
Где находится реализация Container?


Название: Re: Как сохранить результаты работы плагина в главном приложении?
Отправлено: Jeka от Июль 30, 2013, 15:53
Ага... секундочку. Вроде заработало.


Название: Re: Как сохранить результаты работы плагина в главном приложении?
Отправлено: Jeka от Июль 30, 2013, 17:41
Да, спасибо. Все заработало. В проекте плагина класс Container был подключен только с помощью #include в хеадере класса интерфейса.

Добавил в файл проекта плагина plugin.pro пути к container.h и container.cpp и все заработало.