PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QtDesigner will Widgetplugin aus mysteriösen Gründen nicht laden (zwei Zeilen)



axeljaeger
06-07-2004, 16:47
Ich hab vor geraumer Zeit ein Widgetplugin geschrieben, dass aus mir bis eben unbekannten Gründen auf einmal nicht mehr laden wollte. Ich hab schon den Designer verteufelt und was nicht alles. Seit gestern abend sitze ich hier und kreise den Fehler ein. Jetzt konnte ich den Fehler auf zwei Zeilen eingrenzen. Ich habe jetzt zwei identische Widgetplugins, bis auf zwei Zeilen. Das eine lädt:



QWidget* QCodeWidgetPlugin::create( const QString &classname, QWidget* parent, const char* name) {
if ("TextEditor" == classname) {
return new TextEditor(parent, name);
} else if ("TabWorkspace" == classname) {
return new TabWorkspace(parent, name);
} else {
return 0;
}
}


Das andere nicht:



QWidget* QCodeWidgetPlugin::create( const QString &classname, QWidget* parent, const char* name) {
if ("TextEditor" == classname) {
return new TextEditor(parent, name);
} else if ("ProjectTree" == classname) { // Diese beiden Zeilen sind mehr drinn
return new ProjectTree(parent, name); //
} else if ("TabWorkspace" == classname) {
return new TabWorkspace(parent, name);
} else {
return 0;
}
}


Ich finde das äußerst mysteriös, da ja QCodeWidgetPlugin::create überhaupt nicht in den Prozess des Ladens und Verifizierens des Plugins involviert sein SOLLTE. Irgendwelche Ideen, woran das liegen könnte? Für mich riecht das schon nach Bug in Software, die ich nicht geschrieben hab.

Vielen Dank.

axeljaeger
06-07-2004, 18:39
Es scheint sich geklärt zu haben: ProjectTree ist böse, da es includes benutzt, deren Implementation nicht zum Plugin dazu gelinkt werden. new ProjectTree() müsste also einen Runtime-Fehler liefern: Undefined reference...
Warum aber der Designer das Plugin nicht lädt, ist mir immernoch schleierhaft: Der fragliche Code wird ja erst aufgerufen, wenn ein Widget auf das Formblatt plaziert wurde. Dann hätte der Designer von mir aus abstürzen dürfen. Oder liefert dlopen ein NULL-Handle zurück, wenn die Gefahr besteht, dass irgendein lib-call in einer undefined reference enden wird? So oder so finde ich, hätte der Designer eine Fehlermeldung ausspucken müssen.

anda_skoa
08-07-2004, 11:10
Hängt wahrscheinlich vom Linkmodus ab, der bei dlopen angegeben wurde.

Ciao,
_