Добрый день. Мое приложение подгружает несколько плагинов, которым необходимо обмениваться некоторой информацией.
Пытался делать вот так:
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().
Подскажите как сделать сохранение временной информации?