[SOLUCIONADO]Plugins personalizados - Custom plugins



  • Buenos días a todos.

    estoy creando mis propios plugins para poderlos introducir posteriormente en eclipse pero hace tiempo tengo ciertos problemas con la diferenciación de las distintas versiones de estos plugins. Me gustaría que distintas versiones pudieran coexistir en la misma aplicación.

    Qt 4.6.1.

    la cuestión es que tengo una variable interna donde marco la versión a la que corresponde, pero aunque tenga los grupos de plugins bien definiciones en la barra The Qt widget box, luego todos los elementos me muestran la misma versión.

    Sé que en linux las versiones de las librerías tienen un sobre nombre después de .so como por ejemplo .so.0, .so.0.4, .so.0.4.2 pero cuando defines en el .pro

    @CONFIG +=release designer plugin@

    las librerías ya no utilizan ningún soname.

    Alguien me podría orientar por donde tirar? No he probado con versiones de Qt posteriores por cuestión de no poder moverme de versión a causa de otras aplicaciones.

    A alguien se le ocurre algo?



  • No acabo de entender qué es lo que quieres exactamente. Se trata de cargar tus propias librerias externas (.so) en tu aplicación?



  • Siento no haber podido contestar antes pero he estado liado con otras cosas.

    La pregunta era la siguiente:

    Teniendo mis propios plugins creados, como mantener distintas versiones en activo a la vez de esos plugins.

    Lo he conseguido de una forma un poco burra pero funciona, que es añadiendo al nombre de la clase base la versión a la que pertenece. Esto lo he realizado mediante defines, teniendo que modificar una sola variable para crear una nueva versión.

    Pero para que en Eclipse, el plugin funcione correctamente, donde se define la clase no puede estar con el define, en todo el resto de la clase si.

    Añadiré parte del código por si no me expresado correctamente:

    PuebaPlugin.h
    @#ifndef PRUEBAPLUGIN_H
    #define PRUEBAPLUGIN_H

    #include <QDesignerCustomWidgetInterface>

    #define PLG_VRS "0"
    #define PRUEBA Prueba_0

    class PruebaPlugin : public QObject,
    public QDesignerCustomWidgetInterface
    {
    Q_OBJECT
    Q_INTERFACES(QDesignerCustomWidgetInterface)

    public:
    PruebaPlugin(QObject *parent = 0);

    bool isContainer() const;
    bool isInitialized() const;
    QIcon icon() const;
    QString domXml() const;
    QString group() const;
    QString includeFile&#40;&#41; const;
    QString name() const;
    QString toolTip() const;
    QString whatsThis() const;
    QWidget *createWidget(QWidget *parent);
    void initialize(QDesignerFormEditorInterface *core);
    

    private:
    bool initialized;

    };

    #endif // PRUEBAPLUGIN_H@

    PuebaPlugin.cpp
    @#include "pruebaplugin.h"
    #include "prueba.h"

    #include <QtPlugin>

    PruebaPlugin::PruebaPlugin(QObject *parent)
    : QObject(parent)
    {
    initialized = false;
    }

    void PruebaPlugin::initialize(QDesignerFormEditorInterface *)
    {
    if (initialized)
    return;

    initialized = true;
    

    }

    bool PruebaPlugin::isInitialized() const
    {
    return initialized;
    }

    QWidget *PruebaPlugin::createWidget(QWidget *parent)
    {
    return new PRUEBA(parent);
    }

    QString PruebaPlugin::toolTip() const
    {
    return "";
    }

    QString PruebaPlugin::whatsThis() const
    {
    return "";
    }

    bool PruebaPlugin::isContainer() const
    {
    return false;
    }

    QString PruebaPlugin::domXml() const
    {
    QString str;

    str=QString("<ui language="c++">\n"
    " <widget class="Prueba_%1" name="Prueba_%1">\n"
    " <property name="geometry">\n"
    " <rect>\n"
    " <x>0</x>\n"
    " <y>0</y>\n"
    " <width>50</width>\n"
    " <height>50</height>\n"
    " </rect>\n"
    " </property>\n"
    " <property name="toolTip" >\n"
    " <string></string>\n"
    " </property>\n"
    " <property name="whatsThis" >\n"
    " <string></string>\n"
    " </property>\n"
    " </widget>\n"
    "</ui>\n").arg(PLG_VRS);

    return str;
    }

    QString PruebaPlugin::includeFile() const
    {
    return "prueba.h";
    }

    Q_EXPORT_PLUGIN2(PruebaPlugin, PruebaPlugin)
    @

    Prueba.h
    @#ifndef PRUEBA_H
    #define PRUEBA_H

    #include <QtGui/QWidget>

    #include <QtDesigner/QDesignerExportWidget>

    #include "ui_prueba.h"

    #define PLG_VRS "0"
    #define PRUEBA Prueba_0

    class QDESIGNER_WIDGET_EXPORT Prueba_0 : public QWidget
    {
    Q_OBJECT

    public:
    PRUEBA(QWidget *parent = 0);
    ~PRUEBA();

    private:
    Ui::pruebaClass ui;
    };

    #endif // PRUEBA_H
    @

    Prueba.cpp
    @#include "prueba.h"

    PRUEBA::PRUEBA(QWidget *parent)
    : QWidget(parent)
    {
    ui.setupUi(this);
    }

    PRUEBA::~PRUEBA()
    {

    }
    @

    Al final la clase base del plugin en la que esta definida en el define y en la definición de la clase Prueba_0, que tienen que ser lo mismo.

    Se entiende algo mejor ahora o no?


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.