|
creacion_plugins
#Como generar y compilar nuevos plugins en el programa IntroduccionLa idea basica de este programa es poder sumar caracteristicas al mismo simplemente agregardo una libreria dinamica que se pueda cargar en tiempo de ejecucion cuando cargue el programa y desde ahi, poder trabajar tranquilamente sin preocuparse por las consideraciones generales del programa, como manejo de ventanas, barras de herramientas, menus y actualizaciones. Como generar un nuevo pluginEstructuraCada plugin tiene necesariamente una estructura predefinida, puede ser de cualquiera de estos 3 tipos:
CreacionPara generar un nuevo plugin, hacemos una nueva carpeta dentro de la carpeta de plugins, y generamos el archivo .pro necesario. Se recomienda que se establezcan las siguientes variables para que se pueda cargar automaticamente al iniciarse el programa: TEMPLATE = lib CONFIG += dll \ plugin \ help DESTDIR = ../../bin/plugins INCLUDEPATH += ../../utiles LIBS += ../../bin/libutiles.a Definimos a este subproyecto como una libreria tipo plugin y le agregamos dll para que se gener como archivo dll en windows. La adicion de help es para que se pueda usar el sistema interno de ayuda. Agregamos ademas la libreria utiles que contiene las ventanas, visores de resumenes, acciones estandar y el sistema de ayuda. Clase principalCuando se inicializa el plugin, se carga una clase que tiene como finalidad hacer la inicializacion del plugin antes de usarlo. Para eso, implmementamos una de las interfaces elegidas: EPlugin Esta clase nos da las funciones minimas y necesarias que se precisan para que el plugin pueda cargarse correctamente. Las funciones son las siguientes: QList<QAction *> accionesBarra() const = 0; Es la funcion que se llamara cuando se busquen las acciones para colocar en la barra de herramientas. virtual bool inicializar( QSettings *pref ) = 0; Es la funcion que se llamara antes que ninguna y se utiliza para inicializar todas las acciones, funciones y demas cosas que sean necesarias. El objeto pref, apunta a las preferencias del programa, es un objeto global y estatico. Si la inicializacion se hizo correctamente, debe retornar true, o false en otro caso. virtual QWidgetList formsPreferencias() = 0; Devuelve la lista de QWidgets que se cargaran cuando se abran las preferencias del programa. Revise la pagina de formularios_preferencias para ver como implementarlo. virtual QString nombre() const = 0; Devuelve el nombre interno del plugin. Sirve para buscar actualizaciones. virtual int tipo() const = 0; Devuelve el tipo de plugin que es ( comentado al principio ). virtual void crearMenu( QMenuBar *m ) = 0; Esta funcion le pasa la barra del menu para que se puedan crear todas las entradas necesarias. virtual bool verificarTablas() = 0; Esta funcion tiene la finalidad de verificar que las tablas en la base de datos de este plugin estan en estado consistente y que existen. Si esta funcion devuelve false, se intentaran crear nuevamente las tablas. virtual double version() const = 0; Devuelve la version del programa. Utilizada cuando se verifican las actualizaciones. virtual void agregarVentana( QWidget *v ) = 0; Esta es una señal a la cual se debe llamar cada vez que se quiera agregar una nueva ventana. Agregando tablas de base de datosPara cada plugin, existe un metodo que le permite conocer si estan las tablas creadas pra usar. Este metodo de verificar tablas, de retornar falso, intentara crearlas a travez del archivo embebido que se encuentra en el directorio :/sql, y el cual debe tener la siguiente forma: <nombrePlugin>.<DriverSQL>.sql
Ejemplo:
Recuerde que la sintaxis de este archivo es un archivo sql. Consideraciones especiales: SQLiteEsta base de datos al estar embebida en un archivo, es bastante lenta cuando se utilizan campos blob y su rango de tipos de datos es limitado. Recuerde que debe colocar los valores para el proximo indice dentro de la tabla sqlite_sequence sino no se podran insertar los datos nuevos mediante el programa. De no encontrar el archivo, o no encontrar el archivo para el driver correspondiente, no se cargará el plugin. MySqlGeneralmente no tendra gran cantidad de problemas con este plugin. Solo verifique que el codigo funciona sin problemas mediante una interfaz web. Es probable que esta caracteristica se deshabilite para este driver, ya que al tratarse de una base de datos externa, las tablas deben ser generadas cada vez que se crea una base de datos para los clientes. Para ver como embeber archivos en el plugin, visita la pagina embeber_archivos. InicializacionCuando un plugin es cargado por el programa principal, se ejecutara el metodo inicializar(). Dentro de este metodo generalmente se realizan todas las inicializaciones de acciones y verificaciones extras a la de la base de datos. No intente crear barras de tareas o demas dentro de este metodo. Barra lateralPara mostrar acciones de este plugin dentro de la barra lateral del programa, se debe implementar el metodo QList<QActionGroup `*`> accionesBarra() Para entender como funciona este sistema de barra lateral vea barra_lateral. MenusPara generar o agregar cosas dentro de los menus actuales, existe el metodo void crearMenu( QMenuBar `*` ) El parametro pasado como puntero es la barra de menu, asique se puede usar como si fuera la funcion menuBar() de cualquier QMainWindow. Para un ejemplo de esto vea generar_menu ( proximamente ) Otros MetodosQString directorioBackup() Devuelve el directorio donde se hara el backup on-line ( a implmenetar ) QString directorioActualizaciones() Devuelve el directorio donde se buscaran las actualizaciones especificas. ( a re implementar ). |
Sign in to add a comment