2010-09-01 85 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) {} 
}; 

} 
相關問題