Moje niestandardowe plugin działa dobrze przy użyciu następującego kodu. W tym przykładzie przestrzeń nazw jest używana nie tylko w wtyczce, ale również w klasie, która dziedziczy wtyczkę.
Stół do wtyczki --- to może być stosowane w QDesigner
namespace plugin {
class MyCustomPlugin: public QObject, public QDesignerCustomWidgetInterface
{
Q_OBJECT
Q_INTERFACES(QDesignerCustomWidgetInterface)
public:
MyCustomPlugin(QObject *parent = 0);
bool isContainer() const;
bool isInitialized() const;
QIcon icon() const;
QString domXml() const;
QString group() const;
QString includeFile() const;
QString name() const;
QString toolTip() const;
QString whatsThis() const;
QWidget *createWidget(QWidget *parent);
void initialize(QDesignerFormEditorInterface *core);
private:
bool initialized;
};
}
plik cpp dla tej wtyczki
Wdrożenie klasy jak zwykle, ale następujące metody należy wziąć pod stanowią przestrzeń nazw:
QString MyCustomPlugin::domXml() const
{
return "<widget class=\"plugin::MyCustomClass\" name=\"mycustomclass\">\n"
...
}
QString MyCustomPlugin::name() const
{
return "plugin::MyCustomClass";
}
QWidget *MyCustomPlugin::createWidget(QWidget *parent)
{
return new plugin::MyCustomClass(parent);
}
Q_EXPORT_PLUGIN2(mycustomplugin, plugin::MyCustomPlugin)
MyCustomClass
namespace plugin {
class QDESIGNER_WIDGET_EXPORT MyCustomClass: public MyCustomPlugin
{
Q_OBJECT
public:
MyCustomClass(QWidget * parent = 0) {}
};
}
Którą wersję Qt używasz? Myślę, że muszę używać starej wersji, ponieważ to, co powiedziałeś, nie działa. –
Obecnie Qt 4.6 i Qt Creator 2.0, ale pamiętam, że działa to również ze starszymi wersjami. – andref
To działało dla mnie w 4.7.1. Dzięki. – cweston