2010-09-01 67 views
7

我在一个命名空间了myNameSpace促进自定义窗口小部件名称空间中的

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

如何促进一个QWidget在我的UI形式MyCustomWidget已经MyCustomWidget?它似乎不接受自定义命名空间。

回答

11

输入包含名称空间的类的名称:My::PushButton。有用。请注意:

  • Qt Designer会尝试猜测标题名称:my_pushbutton.h。如果它错了,请更改它。
  • 您应该检查在您的项目的路径,以确定是否一个全球性的包括为促进小部件将工作
+0

您正在使用哪个版本的Qt?我认为我必须使用旧版本,因为做你说的不起作用。 – 2010-09-02 16:48:58

+0

现在,Qt 4.6和Qt Creator 2.0,但我记得这也适用于旧版本。 – andref 2010-09-03 00:29:44

+0

这在4.7.1中适用于我。谢谢。 – cweston 2011-01-04 02:36:46

1

我的自定义插件做工不错使用下面的代码。在这个例子中,命名空间不仅用于插件,而且还用于继承插件的类。

头的插件---它可以在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文件该插件

实现类像往常一样,但下面的方法都必须考虑到帐户名称空间:

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

} 
相关问题