Eigene Plugins

Alles rund um die Programmierung mit Qt
Antworten
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Eigene Plugins

Beitrag von AuE »

Hi,

habe mir gerade ein eigenes Widget gebaut was ich gerne im Designer haben möchte...

Kleiner Probs:
a) Das Plugin wird im lokalen Ordner gebaut und nicht im /plugin/designer
b) Nach man. kopieren sehe ich das Widget nicht im Designer. Wenn ich über forms->Loaded Plugins gehe sehe ich meins und das Webding.

Hier mal meine .pro

Code: Alles auswählen

# -------------------------------------------------
# Project created by QtCreator 2009-09-23T12:24:35
# -------------------------------------------------
CONFIG += designer \
    plugin
TARGET = $$qtLibraryTarget($$TARGET)
TEMPLATE = lib
QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/designer
DEFINES += NAVIGATIONWIDGET_LIBRARY
SOURCES += navigationwidget.cpp \
    avnavigationwidget.cpp
HEADERS += navigationwidget.h \
    avnavigationwidget.h
FORMS += avnavigationwidget.ui
RESOURCES += resource.qrc

# install
target.path = $$[QT_INSTALL_PLUGINS]/designer
sources.files = $$SOURCES \
    $$HEADERS \
    *.pro
sources.path = /home/myname/projects/unix-gui/CC_NavigationWidget/navigationWidget

# [QT_INSTALL_EXAMPLES]/designer/customwidgetplugin
INSTALLS += target \
    sources
Die Interface Klasse:

Code: Alles auswählen

#include <QtPlugin>

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

void NavigationWidget::initialize(QDesignerFormEditorInterface * /* core */)
 {
     if (initialized)
	 return;

     initialized = true;
 }

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

 QWidget *NavigationWidget::createWidget(QWidget *parent)
 {
	 /*TODO*/
     return new AvNavigationWidget(parent);
 }

 QString NavigationWidget::name() const
 {
     return "NavigationWidget";
 }

 QString NavigationWidget::group() const
 {
     return "Containers";
 }

 QIcon NavigationWidget::icon() const
 {	
     return QIcon(":/icons/configuration_icon.ico");
 }

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

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

 bool NavigationWidget::isContainer() const
 {
     return true;
 }

 QString NavigationWidget::domXml() const
 {
     return QString();
 }

 QString NavigationWidget::includeFile() const
 {
     return "avnavigationwidget.h";
 }

 Q_EXPORT_PLUGIN2(navigationwidget, NavigationWidget)
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Der Refresh bringt folgende Meldung:
A class name mismatch occurred when creating a widget using the custom widget factory registered for widgets of class NavigationWidget. It returned a widget of class AvNavigationWidget.
Wo mache ich den sch*** Fehler??

Definition der Klasse:

Code: Alles auswählen

class QDESIGNER_WIDGET_EXPORT AvNavigationWidget : public QWidget {...];
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Wenn man die Doku zu doXml liest erschließt sich einiges ;-)
If the widget provides a reasonable size hint, it is not necessary to define it here. In addition, returning an empty string instead of a <widget> element will tell Qt Designer not to install the widget in the widget box.
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

So jetzt zu meinen letzten Problem ;-)

kompilieren klappt soweit und ich bekomm auch ne .so
Make install klappt aber leider noch nicht:
myname@myname:~/qtsdk-2009.03/qt/examples/designer/AvCCNavigation$ make install
install -m 755 -p "libAvCCNavigation.so" "/home/myname/qtsdk-2009.03/qt/plugins/designer/libAvCCNavigation.so"
install -m 644 -p /home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/navigationplugin.cpp /home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/
install: `/home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/navigationplugin.cpp' and `/home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/navigationplugin.cpp' are the same file
make: [install_sources] Error 1 (ignored)
install -m 644 -p /home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/avnavigationplugin.cpp /home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/
install: `/home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/avnavigationplugin.cpp' and `/home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/avnavigationplugin.cpp' are the same file
make: [install_sources] Error 1 (ignored)
install -m 644 -p /home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/navigationplugin.h /home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/
install: `/home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/navigationplugin.h' and `/home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/navigationplugin.h' are the same file
make: [install_sources] Error 1 (ignored)
install -m 644 -p /home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/avnavigationplugin.h /home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/
install: `/home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/avnavigationplugin.h' and `/home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/avnavigationplugin.h' are the same file
make: [install_sources] Error 1 (ignored)
install -m 644 -p /home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/avnavigationplugin.ui /home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/
install: `/home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/avnavigationplugin.ui' and `/home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/avnavigationplugin.ui' are the same file
make: [install_sources] Error 1 (ignored)
install -m 644 -p /home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/resource.qrc /home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/
install: `/home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/resource.qrc' and `/home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/resource.qrc' are the same file
make: [install_sources] Error 1 (ignored)
install -m 644 -p /home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/AvCCNavigation.pro /home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/
install: `/home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/AvCCNavigation.pro' and `/home/myname/qtsdk-2009.03/qt/examples/designer/AvCCNavigation/AvCCNavigation.pro' are the same file
make: [install_sources] Error 1 (ignored)
Bei folgendem profile:
ONFIG += designer plugin
TARGET = $$qtLibraryTarget($$TARGET)

TEMPLATE = lib

QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/designer

HEADERS += navigationplugin.h \
avnavigationplugin.h
SOURCES += navigationplugin.cpp \
avnavigationplugin.cpp
FORMS += avnavigationplugin.ui
RESOURCES += resource.qrc
# install
target.path = $$[QT_INSTALL_PLUGINS]/designer
sources.files = $$SOURCES \
$$HEADERS \
$$FORMS \
$$RESOURCES \
*.pro
sources.path = $$[QT_INSTALL_EXAMPLES]/designer/AvCCNavigation
INSTALLS += target \
sources
Daher geht dann denke ich auch das bauen eines OProjektes das dieses Widget nutzt nicht:

Compiler sagt:
in file included from mainwindow.cpp:2:
ui_mainwindow.h:23:35: error: avnavigationplugin.h: No such file or directory
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

BTW: Kann von euch irgendwer das AnalogClock Plugin in einem Widget benutzen?
Ich meine ich kann es in das Widget ziehen und sehe es-aber kompilieren hängt er sich auf.

Muss ich dann für jedes Plugin das ich so verenden möchte die Pfade setzen?
Antworten