По идее я должен экспортировать только те данные, которые могут быть сопоставлены с подключенными плагинами.
Пока я сделал примерно так:
class CAccountHeader
{
int m_key;
QVariant m_data;
bool m_bResizeColumnToContents;
public:
CAccountHeader(QVariant data, bool brctc=false):m_data(data), m_bResizeColumnToContents(brctc){}
const QVariant &data()const{ return m_data; }
};
class CAccountCol
{
std::map<int, QVariant> m_roleData;
QVariant m_data;
public:
CAccountCol(QVariant data):m_data(data){}
const QVariant &data()const{ return m_data; }
};
class CAccountHeaders : public std::vector<CAccountHeader>{};
class CAccount : public std::vector<CAccountCol>{};
class CAccounts : public std::vector<CAccount>
{
private:
CAccountHeaders m_headers;
public:
void setHeader( const CAccountHeaders &header )
{
m_headers = header;
}
void addAccount( const CAccount &account )
{
this->push_back( account );
}
int headerSize()const { return m_headers.size(); }
};
class CHeaderBuilder
{
std::vector<CHeaderBuilder*> m_builders;
public:
CAccountHeaders build()
{
CAccountHeaders header;
header.push_back( QVariant( "Сервер" ) );
header.push_back( QVariant( "Пользователь" ) );
header.push_back( QVariant( "Пароль" ) );
for( size_t n = 0; n < m_builders.size(); ++n)
{
CHeaderBuilder *pBuilder = m_builders.at(n);
if( pBuilder )
pBuilder->build( &header);
}
return header;
}
protected:
virtual void build(CAccountHeaders *){}
};
class CAccountBuilder
{
std::vector<CAccountBuilder*> m_builders;
public:
CAccount build( const char *pServer, const char *pUser, const char *pPass)
{
CAccount account;
account.push_back( QVariant( pServer ) );
account.push_back( QVariant( pUser ) );
account.push_back( QVariant( pPass ) );
for( size_t n = 0; n < m_builders.size(); ++n)
{
CAccountBuilder *pBuilder = m_builders.at(n);
if( pBuilder )
pBuilder->build( &account);
}
return account;
}
protected:
virtual void build(CAccount *){}
};
Ну а в модели у меня создается объект:
CAccounts m_accounts;
который заполняется при запуске приложения после создания всех билдеров с учетом загруженных плагинов.
А CAccountHeader::m_key использую для сохранения данных, и он назначается в плагине и относится только к определенному плагину. Потому если какой-то плагин отключен, то при импорте столбцы из плагина не будут учитываться...