Hallo nochmal ich suche jetzt schon seit zwei Tagen. Deshalp poste ich jetzt mal meine gesamten sourcen. Vielleicht findet ja einer den Fehler:
esftools.cpp
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication app(argc,argv);
MainWindow wnd;
wnd.show();
return app.exec();
}
mainwindow.h
Code: Alles auswählen
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QObject>
#include <QMessageBox>
#include <QDir>
#include <ui_mainwindow.h>
#include "plugininterface.h"
using namespace Ui;
class MainWindow : public QMainWindow, public UI_MainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = NULL);
bool eventFilter(QObject *obj, QEvent *event);
~MainWindow();
private:
PluginInterface *pl;
void loadPlugins();
};
mainwindow.cpp
Code: Alles auswählen
#include <QPluginLoader>
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
this->setupUi(this);
label->installEventFilter(this);
this->pl = NULL;
this->loadPlugins();
}
MainWindow::~MainWindow()
{
}
bool MainWindow::eventFilter( QObject * obj, QEvent * event )
{
if (event->type() == QEvent::MouseButtonRelease)
{
if(qobject_cast<QLabel *>(obj))
{
QMessageBox::information(this,"Clicked","Klick mich nochmal",QMessageBox::Ok);
if(this->pl)
pl->doit();
else
QMessageBox::information(this,"Doh","kein plugin geladen",QMessageBox::Ok);
}
}
return false;
}
void MainWindow::loadPlugins( )
{
QDir pluginsDir = QDir(qApp->applicationDirPath());
foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {
QMessageBox::information(this,"AHA",pluginsDir.absoluteFilePath(fileName),QMessageBox::Ok);
QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
QObject *plugin = loader.instance();
if (plugin != NULL) {
QMessageBox::information(this,"AHA","plugin geladen",QMessageBox::Ok);
this->pl = qobject_cast<PluginInterface *>(plugin);
}
}
}
PluginInterface.h
Code: Alles auswählen
class PluginInterface
{
public:
virtual ~PluginInterface() {}
virtual int doit() = 0;
};
Q_DECLARE_INTERFACE(PluginInterface,"de.plugintest.EsfTools.PluginInterface/1.0")
Project File:
Code: Alles auswählen
# Diese Datei wurde mit dem qmake-Manager von KDevelop erstellt.
# -------------------------------------------
# Unterordner relativ zum Projektordner: ./src
# Das Target ist eine Anwendung: ../bin/esftools
FORMS += mainwindow.ui
IDLS += mainwindow.ui
HEADERS += mainwindow.h \
plugininterface.h
SOURCES += esftools.cpp \
mainwindow.cpp
TARGET=../bin/esftools
Soweit zum PluginLoader
jetzt das Plugin
yhinplugin.h
Code: Alles auswählen
#include <QtCore>
#include <plugininterface.h>
class YhinPlugin : public QObject, public PluginInterface
{
Q_OBJECT
Q_INTERFACES(PluginInterface)
public:
YhinPlugin();
int doit();
~YhinPlugin();
};
yhinplugin.cpp
Code: Alles auswählen
#include "yhinplugin.h"
#include <QWidget>
YhinPlugin::YhinPlugin()
{
}
YhinPlugin::~YhinPlugin()
{
}
int YhinPlugin::doit()
{
QWidget *window = new QWidget(NULL);
window->resize( 100,100);
window->show();
delete window;
return 0;
}
Q_EXPORT_PLUGIN2(yhin,YhinPlugin);
und das pro file:
Code: Alles auswählen
# Diese Datei wurde mit dem qmake-Manager von KDevelop erstellt.
# -------------------------------------------
# Unterordner relativ zum Projektordner: ./yhinplugin
# Das Target ist eine Bibliothek: yhin
INCLUDEPATH += ../src
TARGET = yhin
DESTDIR = ../bin
TEMPLATE = lib
CONFIG += release \
warn_on \
plugin
HEADERS += yhinplugin.h
SOURCES += yhinplugin.cpp
Die Qt Bibiliotheken sind dynmisch gelinkt und das plugandpaint example lässt sich auch richtig übersetzten also muss es was mit meinem Projekt zu tun haben.
Ach ja ich arbeite unter einem SuSE Linux 9.3 er System mit KDevelop