QT4(.0.1) - Plugins
Verfasst: 27. Dezember 2005 13:45
Hallo!
Ich habe ein kleines Problem mit einem selbstgeschriebenen QT-Plugin. Dieses Plugin wird von einer Anwendung geladen und soll einen QDialog anzeigen.
Das Interface ist folgendermaßen deklariert:
class MyInterface
{
public:
virtual ~MyInterface() {};
virtual QDialog *createDialog()=0;
};
Q_DECLARE_INTERFACE(MyInterface,"myInterface/1.0");
Die Deklaration des Plugins sieht folgendermaßen aus:
class MyPlugin : public QObject, public MyInterface
{
Q_OBJECT
Q_INTERFACES(MyInterface);
public:
QDialog *createDialog();
[...]
};
Die Funktion createDialog sieht so aus:
QDialog* MyPlugin::createDialog()
{
QDialog *myDialog=new QDialog();
initDialog(myDialog); //hier werden die GUI Elemente eingefügt
return myDialog;
}
Q_EXPORT_PLUGIN(diwarunPlugin)
Und so wird das Plugin geladen:
QObject *plugin = loader.instance();
if (plugin)
{
MyInterface *plugin_dialog = qobject_cast<MyInterface *>(plugin);
if (plugin_dialog)
{
QDialog *dialog=plugin_dialog->createDialog();
dialog->exec();
}
}
Das Plugin wird korrekt geladen und auch das Dialogfenster angezeigt. Mein Problem besteht darin, dass das Dialogfenster nach dem Schließen ein zweites Mal angezeigt wird und ich keinen Schimmer habe, warum der Dialog zweimal angezeigt wird.
Ein weiteres Problem tritt auf, wenn ich statt QDialog ein eigenes, von QWidget abeleitetes Objekt verwende. Dann tritt beim Laden des Plugins ein Segmentation Fault auf.
Vielen Dank für Eure HIlfe.
Gruß Michael
Ich habe ein kleines Problem mit einem selbstgeschriebenen QT-Plugin. Dieses Plugin wird von einer Anwendung geladen und soll einen QDialog anzeigen.
Das Interface ist folgendermaßen deklariert:
class MyInterface
{
public:
virtual ~MyInterface() {};
virtual QDialog *createDialog()=0;
};
Q_DECLARE_INTERFACE(MyInterface,"myInterface/1.0");
Die Deklaration des Plugins sieht folgendermaßen aus:
class MyPlugin : public QObject, public MyInterface
{
Q_OBJECT
Q_INTERFACES(MyInterface);
public:
QDialog *createDialog();
[...]
};
Die Funktion createDialog sieht so aus:
QDialog* MyPlugin::createDialog()
{
QDialog *myDialog=new QDialog();
initDialog(myDialog); //hier werden die GUI Elemente eingefügt
return myDialog;
}
Q_EXPORT_PLUGIN(diwarunPlugin)
Und so wird das Plugin geladen:
QObject *plugin = loader.instance();
if (plugin)
{
MyInterface *plugin_dialog = qobject_cast<MyInterface *>(plugin);
if (plugin_dialog)
{
QDialog *dialog=plugin_dialog->createDialog();
dialog->exec();
}
}
Das Plugin wird korrekt geladen und auch das Dialogfenster angezeigt. Mein Problem besteht darin, dass das Dialogfenster nach dem Schließen ein zweites Mal angezeigt wird und ich keinen Schimmer habe, warum der Dialog zweimal angezeigt wird.
Ein weiteres Problem tritt auf, wenn ich statt QDialog ein eigenes, von QWidget abeleitetes Objekt verwende. Dann tritt beim Laden des Plugins ein Segmentation Fault auf.
Vielen Dank für Eure HIlfe.
Gruß Michael