the file presupuesto.cpp:
#ifndef EPRESUPUESTO_H
#define EPRESUPUESTO_H
#include <QObject>
#include <QPluginLoader>
#include <epresupuesto.h>
/**
* \brief Clase de presupuesto
*
* Clase que sirve como contenedor de un presupuesto y puede hacer todas sus operaciones
*
* @author Esteban Zeller <juiraze@yahoo.com.ar>
*/
{
Q_OBJECT
public:
~Presupuesto();
private:
EPresupuesto *_plugin;
};
#endif
#ifndef EPRESUPUESTO_H
#define EPRESUPUESTO_H
#include <QObject>
class QSqlRecord;
#include <QPluginLoader>
#include <epresupuesto.h>
class QPainter;
/**
* \brief Clase de presupuesto
*
* Clase que sirve como contenedor de un presupuesto y puede hacer todas sus operaciones
*
* @author Esteban Zeller <juiraze@yahoo.com.ar>
*/
class Presupuesto : public QObject
{
Q_OBJECT
public:
Presupuesto(QObject *parent = 0);
~Presupuesto();
QSqlRecord registro( int id );
void imprimir( QPainter *pintador );
private:
EPresupuesto *_plugin;
QPluginLoader *loader;
};
#endif
To copy to clipboard, switch view to plain text mode
in the file presupuesto.cpp:
#include "presupuesto.h"
#include <QDir>
#include <QApplication>
#include <QSqlRecord>
#include <QPainter>
#include "eplugin.h"
#include "prespuesto.h"
#include <QMessageBox>
Presupuesto
::Presupuesto(QObject *parent
){
// Busco los plugins de presupuestos
QDir pluginsDir
= QDir(qApp
->applicationDirPath
());
#if defined(Q_OS_WIN)
if (pluginsDir.dirName().toLower() == "debug" || pluginsDir.dirName().toLower() == "release")
pluginsDir.cdUp();
#elif defined(Q_OS_MAC)
if (pluginsDir.dirName() == "MacOS") {
pluginsDir.cdUp();
pluginsDir.cdUp();
pluginsDir.cdUp();
}
#endif
pluginsDir.cd("plugins");
pluginsDir.cd("presupuesto");
#ifdef Q_WS_WIN32
filtro.append( "*.dll" );
#endif
// Obtengo el nombre del plugin de infoprog actual para cargar el del mismo nombre
int pos
= pluginsDir.
entryList( QDir::Files ).
indexOf( prespuesto
::pref()->value
( "pluginInfo",
"default" ).
toString() );
if( pos == -1 )
{
QMessageBox::critical( 0,
"Error",
"No existe ningun plugin de presupuestos definidos! Verifique la instalación!" );
return;
}
loader
->setFileName
( pluginsDir.
absoluteFilePath( pluginsDir.
entryList( QDir::Files ).
at( pos
) ) );
if( loader->load() )
{
_plugin = qobject_cast<EPresupuesto *>(loader->instance());
}
else
{
qWarning( "Error al cargar el plugin" );
qWarning
( QString( "Error: %1" ).
arg( loader
->errorString
() ).
toLocal8Bit() );
}
// Fin de la carga del plugin
}
Presupuesto::~Presupuesto()
{
}
#include "presupuesto.h"
#include <QDir>
#include <QApplication>
#include <QSqlRecord>
#include <QPainter>
#include "eplugin.h"
#include "prespuesto.h"
#include <QMessageBox>
Presupuesto::Presupuesto(QObject *parent)
: QObject(parent)
{
loader = new QPluginLoader( this );
// Busco los plugins de presupuestos
QDir pluginsDir = QDir(qApp->applicationDirPath());
#if defined(Q_OS_WIN)
if (pluginsDir.dirName().toLower() == "debug" || pluginsDir.dirName().toLower() == "release")
pluginsDir.cdUp();
#elif defined(Q_OS_MAC)
if (pluginsDir.dirName() == "MacOS") {
pluginsDir.cdUp();
pluginsDir.cdUp();
pluginsDir.cdUp();
}
#endif
pluginsDir.cd("plugins");
pluginsDir.cd("presupuesto");
#ifdef Q_WS_WIN32
QStringList filtro;
filtro.append( "*.dll" );
#endif
// Obtengo el nombre del plugin de infoprog actual para cargar el del mismo nombre
int pos = pluginsDir.entryList( QDir::Files ).indexOf( prespuesto::pref()->value( "pluginInfo", "default" ).toString() );
if( pos == -1 )
{
QMessageBox::critical( 0, "Error", "No existe ningun plugin de presupuestos definidos! Verifique la instalación!" );
return;
}
loader->setFileName( pluginsDir.absoluteFilePath( pluginsDir.entryList( QDir::Files ).at( pos ) ) );
if( loader->load() )
{
_plugin = qobject_cast<EPresupuesto *>(loader->instance());
}
else
{
qWarning( "Error al cargar el plugin" );
qWarning( QString( "Error: %1" ).arg( loader->errorString() ).toLocal8Bit() );
}
// Fin de la carga del plugin
}
Presupuesto::~Presupuesto()
{
}
To copy to clipboard, switch view to plain text mode
the include file that contains the interface it this:
#ifndef EPRESUPUESTO_H
#define EPRESUPUESTO_H
#include <QtPlugin>
/**
* \brief Interfaz de presupuesto
*
* Interfaz para especificaciones del plugin presupuesto
*
* @author Esteban Zeller <juiraze@yahoo.com.ar>
*/
class EPresupuesto
{
public:
virtual ~EPresupuesto() {}
virtual QString nombre
() const = 0;
virtual double version() const = 0;
virtual QString obtenerContenido
() = 0;
};
Q_DECLARE_INTERFACE(EPresupuesto,
"tranfuga.EPresupuesto/1.0" )
#endif
#ifndef EPRESUPUESTO_H
#define EPRESUPUESTO_H
#include <QtPlugin>
class QString;
class QSqlRecord;
/**
* \brief Interfaz de presupuesto
*
* Interfaz para especificaciones del plugin presupuesto
*
* @author Esteban Zeller <juiraze@yahoo.com.ar>
*/
class EPresupuesto
{
public:
virtual ~EPresupuesto() {}
virtual QString nombre() const = 0;
virtual double version() const = 0;
virtual void setRegistro( QSqlRecord *rec ) = 0;
virtual QString obtenerHtml() = 0;
virtual QString obtenerContenido() = 0;
};
Q_DECLARE_INTERFACE(EPresupuesto,
"tranfuga.EPresupuesto/1.0" )
#endif
To copy to clipboard, switch view to plain text mode
all the sintaxis and definitions are ok, but the compiler dont get the class EPresupuesto like a valid class...
all this clasess are inside a Qt Plugin....
Bookmarks