PDA

View Full Version : Custom Plugin problem to build



brevleq
21st December 2008, 03:30
Hi guys!!

I have to do some custom plugins to use with designer, but I'm having problems to build it!

This message is shown when I try to build:


hudson@brevleq:~/documentos/7º periodo/sistemas distribuidos/fontes/SpinViewPlugin$ make
make -f Makefile.Release
make[1]: Entrando no diretório `/home/hudson/documentos/7º periodo/sistemas distribuidos/fontes/SpinViewPlugin'
g++ -c -pipe -O2 -D_REENTRANT -Wall -W -fPIC -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SCRIPT_LIB -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQDESIGNER_EXPORT_WIDGETS -DQT_SHARED -I/opt/qt4/mkspecs/linux-g++ -I. -I/opt/qt4/include/QtDesigner -I/opt/qt4/include/QtCore -I/opt/qt4/include/QtCore -I/opt/qt4/include/QtGui -I/opt/qt4/include/QtGui -I/opt/qt4/include/QtXml -I/opt/qt4/include/QtXml -I/opt/qt4/include/QtScript -I/opt/qt4/include/QtScript -I/opt/qt4/include -I. -Icontainer -Iporta -Iobserver -Iobserver/events -Icontroller -Iview -Igenerator -Irelease -I. -o release/SpinViewPlugin.o SpinViewPlugin.cpp
SpinViewPlugin.cpp:49: error: expected constructor, destructor, or type conversion before '(' token
make[1]: ** [release/SpinViewPlugin.o] Erro 1
make[1]: Saindo do diretório `/home/hudson/documentos/7º periodo/sistemas distribuidos/fontes/SpinViewPlugin'
make: ** [release] Erro 2
hudson@brevleq:~/documentos/7º periodo/sistemas distribuidos/fontes/SpinViewPlugin$

These are the source files:


#ifndef SPINVIEWPLUGIN_H
#define SPINVIEWPLUGIN_H

#include <QString>
#include <QDesignerCustomWidgetInterface>
#include "SpinView.h"

/// class SpinViewPlugin -
class SpinViewPlugin : public QObject,public QDesignerCustomWidgetInterface {
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)

public:
SpinViewPlugin(QObject *parent=0);

QString name() const;
QString includeFile() const;
QString group() const;
QIcon icon() const;
QString toolTip() const;
QString whatsThis() const;
bool isContainer() const;
QWidget *createWidget(QWidget *parent);

bool isInitialized() const;
void initialize(QDesignerFormEditorInterface *core);

private:
bool initialized;

};

#endif



#include "SpinViewPlugin.h"

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

void SpinViewPlugin::initialize(QDesignerFormEditorInte rface *){
if (initialized)
return;
initialized = true;
}

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

QString SpinViewPlugin::name() const{
return "SpinView";
}

QString SpinViewPlugin::includeFile() const{
return "SpinView.h";
}

QString SpinViewPlugin::group() const{
return tr("Brevleq's widgets");
}

QIcon SpinViewPlugin::icon() const{
return QIcon("/opt/qt4/doc/src/images/plastique-spinbox.png");
}

QString SpinViewPlugin::toolTip() const{
return tr("MVC's View");
}

QString SpinViewPlugin::whatsThis() const{
return tr("This widget is used like View in MVC pattern!");
}

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

QWidget *SpinViewPlugin::createWidget(QWidget *parent){
return(new SpinView(parent));
}

Q_EXPORT_PLUGIN2(customwidgetplugin, SpinViewPlugin)


The problem is happening in the last line of cpp file!

here is my *.pro file:


TEMPLATE = lib
CONFIG += designer \
plugin \
debug_and_release

DEPENDPATH += . \
container \
controller \
frontend \
generator \
observer \
porta \
view \
observer/events
INCLUDEPATH += . \
container \
porta \
observer \
observer/events \
controller \
view \
generator

# Input
HEADERS += SpinViewPlugin.h \
container/CLP.h \
controller/Controller.h \
controller/TypeWriter.h \
controller/ValueWriter.h \
frontend/FrontEnd.h \
generator/BGenerator.h \
generator/CGenerator.h \
generator/Generator.h \
generator/QGenerator.h \
generator/TGenerator.h \
observer/Observer.h \
observer/Subject.h \
porta/Porta.h \
porta/PortaEntrada.h \
porta/PortaSaida.h \
view/ComboView.h \
view/SpinView.h \
view/View.h \
observer/events/Event.h \
observer/events/ValueChangedEvent.h
FORMS += frontend/FrontEnd.ui
SOURCES += SpinViewPlugin.cpp \
container/CLP.cpp \
controller/Controller.cpp \
controller/TypeWriter.cpp \
controller/ValueWriter.cpp \
generator/BGenerator.cpp \
generator/CGenerator.cpp \
generator/QGenerator.cpp \
generator/TGenerator.cpp \
observer/Subject.cpp \
porta/Porta.cpp \
porta/PortaEntrada.cpp \
porta/PortaSaida.cpp \
view/ComboView.cpp \
view/SpinView.cpp \
view/View.cpp \
observer/events/Event.cpp \
observer/events/ValueChangedEvent.cpp
DESTDIR = $(QTDIR)/plugins/designer


What should I do to build correctly this plugin??:confused:

janus
21st December 2008, 10:42
Hi,


Q_EXPORT_PLUGIN2 ( PluginName, ClassName )
This macro exports the plugin class ClassName for the plugin specified by PluginName. The value of PluginName should correspond to the TARGET specified in the plugin's project file.
There should be exactly one occurrence of this macro in the source code for a Qt plugin, and it should be used where the implementation is written rather than in a header file.
Example:
Q_EXPORT_PLUGIN2(pnp_extrafilters, ExtraFiltersPlugin)

Not sure, but it might help to rename the plugin name and to add a target to *pro with the same name.

brevleq
21st December 2008, 12:03
The problem still happen:


hudson@brevleq:~/documentos/7º periodo/sistemas distribuidos/fontes/SpinView_plugin$ make
make -f Makefile.Release
make[1]: Entrando no diretório `/home/hudson/documentos/7º periodo/sistemas distribuidos/fontes/SpinView_plugin'
g++ -c -pipe -O2 -D_REENTRANT -Wall -W -fPIC -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SCRIPT_LIB -DQT_XML_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQDESIGNER_EXPORT_WIDGETS -DQT_SHARED -I/opt/qt4/mkspecs/linux-g++ -I. -I/opt/qt4/include/QtDesigner -I/opt/qt4/include/QtCore -I/opt/qt4/include/QtCore -I/opt/qt4/include/QtGui -I/opt/qt4/include/QtGui -I/opt/qt4/include/QtXml -I/opt/qt4/include/QtXml -I/opt/qt4/include/QtScript -I/opt/qt4/include/QtScript -I/opt/qt4/include -I. -Iview -Iporta -Iobserver -Iobserver/events -Icontroller -Icontainer -Igenerator -Irelease -I. -o release/SpinViewPlugin.o SpinViewPlugin.cpp
SpinViewPlugin.cpp:49: error: expected constructor, destructor, or type conversion before '(' token
make[1]: ** [release/SpinViewPlugin.o] Erro 1
make[1]: Saindo do diretório `/home/hudson/documentos/7º periodo/sistemas distribuidos/fontes/SpinView_plugin'
make: ** [release] Erro 2
hudson@brevleq:~/documentos/7º periodo/sistemas distribuidos/fontes/SpinView_plugin$

I've put this in my SpinView_plugin.pro:


TARGET = SpinView_plugin

and put this in my source:


Q_EXPORT_PLUGIN2(SpinView_plugin, SpinViewPlugin)

I think QT isn't identifying his macro.

janus
21st December 2008, 12:06
Did you run qmake again and made a clean release build?

brevleq
21st December 2008, 12:31
I've did it!

I've changed pro file again, based in QT's example:


################################################## ####################
# Automatically generated by qmake (2.01a) dom dez 21 10:02:14 2008
################################################## ####################

CONFIG += designer plugin debug_and_release
TARGET = $$qtLibraryTarget($$TARGET)
TEMPLATE = lib
QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/designer

DEPENDPATH += . \
container \
controller \
frontend \
generator \
observer \
porta \
view \
observer/events
INCLUDEPATH += . \
container \
porta \
observer \
observer/events \
controller \
view \
generator

# Input
HEADERS += SpinViewPlugin.h \
container/CLP.h \
controller/Controller.h \
controller/TypeWriter.h \
controller/ValueWriter.h \
frontend/FrontEnd.h \
generator/BGenerator.h \
generator/CGenerator.h \
generator/Generator.h \
generator/QGenerator.h \
generator/TGenerator.h \
observer/Observer.h \
observer/Subject.h \
porta/Porta.h \
porta/PortaEntrada.h \
porta/PortaSaida.h \
view/ComboView.h \
view/SpinView.h \
view/View.h \
observer/events/Event.h \
observer/events/ValueChangedEvent.h
FORMS += frontend/FrontEnd.ui
SOURCES += SpinViewPlugin.cpp \
container/CLP.cpp \
controller/Controller.cpp \
controller/TypeWriter.cpp \
controller/ValueWriter.cpp \
generator/BGenerator.cpp \
generator/CGenerator.cpp \
generator/QGenerator.cpp \
generator/TGenerator.cpp \
observer/Subject.cpp \
porta/Porta.cpp \
porta/PortaEntrada.cpp \
porta/PortaSaida.cpp \
view/ComboView.cpp \
view/SpinView.cpp \
view/View.cpp \
observer/events/Event.cpp \
observer/events/ValueChangedEvent.cpp

# install
target.path = $$[QT_INSTALL_PLUGINS]/designer
sources.files = $$SOURCES $$HEADERS *.pro
sources.path = $$[QT_INSTALL_EXAMPLES]/designer/customwidgetplugin
INSTALLS += target sources

but the problem still happen!

janus
21st December 2008, 12:43
hm, ... is this missing #include <QtPlugin> ?

brevleq
21st December 2008, 12:49
I don't think the problem is with this class!
But here is the class source:


#ifndef SPINVIEW_H
#define SPINVIEW_H

#include <QSpinBox>
#include "View.h"

class SpinView : public QSpinBox, public View {
Q_OBJECT

public:
SpinView(QObject *parent=0);
void update(Event e);
};

#endif


#include "SpinView.h"

SpinView::SpinView(QObject *parent){
}

void SpinView::update(Event e){
this->setValue(model->getValue());
}


How can you see, this plugin depends of others source files.

If you prefer I can send to your e-mail the sources!
Just give me your e-mail.

janus
21st December 2008, 12:51
What about the qtplugin include?

brevleq
21st December 2008, 13:00
:D Nice!!

I forgot it!
Now it's showing another problem!! :p

But this problem is with my source!!
Thanks

If I have another problem I'll ask you again!!

brevleq
21st December 2008, 16:00
Finally I build it...


BUT

When I open designer my plugin isn't shown!!


I installed the plugin in $QTDIR/plugin/designer/

I did something wrong??:crying:

janus
21st December 2008, 17:41
Hi, you can take a lock in the disigner menu if the plugin was loaded with an error. I had the same problem because i installed the debug version instead ofthe release version.