2010-09-01 20 views
7

He MyCustomWidget en un espacio de nombres MiNombreEspaciowidget personalizado en un espacio de nombres

namespace MyNameSpace{ 
    class MyCustomWidget : public QWidget{ 
    }; 
} 

¿Cómo promover una QWidget a MyCustomWidget en mi forma de interfaz de usuario? No parece aceptar un espacio de nombre personalizado.

Respuesta

11

Escriba el nombre de la clase con el espacio de nombres incluido: My::PushButton. Funciona. Tenga en cuenta que:

  • Qt Designer intentará adivinar el nombre del encabezado: my_pushbutton.h. Cámbielo si está mal.
  • Usted debe verificar la incluyen rutas de acceso en su proyecto para determinar si una inclusión globales para el widget promovido trabajará
+0

¿Qué versión de Qt estás usando? Creo que debo estar usando una versión anterior ya que hacer lo que dijiste no funciona. –

+0

En este momento, Qt 4.6 y Qt Creator 2.0, pero recuerdo que esto también funciona con versiones anteriores. – andref

+0

Esto funcionó para mí en 4.7.1. Gracias. – cweston

1

Mi complemento personalizado funciona bien usando el siguiente código. En este ejemplo, el espacio de nombres no solo se usa en el complemento sino también en la clase que hereda el complemento.

cabecera para el plugin --- que podría ser utilizado en 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; 
}; 

} 

cpp para ese plugin

Implementar la clase como de costumbre, pero los métodos siguientes debe tener en cuenta el espacio de nombres:

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) {} 
}; 

} 
Cuestiones relacionadas