在命名空间中升级自定义窗口小部件

时间:2010-09-01 19:39:54

标签: c++ user-interface qt4

我在命名空间MyNameSpace中有MyCustomWidget

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

如何在UI表单中将QWidget提升为MyCustomWidget?它似乎不接受自定义命名空间。

2 个答案:

答案 0 :(得分:12)

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

  • Qt Designer会尝试猜测标题名称:my_pushbutton.h。如果错误,请更改它。
  • 您应检查项目中的包含路径,以确定推广的窗口小部件的全局包含是否有效

答案 1 :(得分: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) {}
}; 

}
相关问题