【问题标题】:Promote to custom widget in a namespace提升为命名空间中的自定义小部件
【发布时间】:2011-04-06 23:58:33
【问题描述】:

我在命名空间 MyNameSpace 中有 MyCustomWidget

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

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

【问题讨论】:

    标签: c++ user-interface qt4


    【解决方案1】:

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

    • Qt Designer 将尝试猜测标题名称:my_pushbutton.h。错了就改。
    • 您应该检查项目中的包含路径以确定提升的小部件的全局包含是否有效

    【讨论】:

    • 您使用的是哪个版本的 Qt?我想我一定是在使用旧版本,因为按照你说的做是行不通的。
    • 现在,Qt 4.6 和 Qt Creator 2.0,但我记得这也适用于旧版本。
    • 它对我不起作用..我的工作区名称是 GUI,提升的小部件名称是 gv.. 当我将提升的类名称设置为 GUI::gv 并将头文件设置为 gv.h 到小部件时,我在我的 ui_.h 文件中收到“错误:没有调用 'GUI::gv::gv(QWidget*&)' 的匹配函数”?有人能告诉我我在这里缺少什么吗?
    • 我的猜测:错误的包含路径或 gv 没有使用指向 QWidget 的指针的构造函数。生成的 ui 文件是否包含具有适当解析机制(全局或本地)的正确标头?
    【解决方案2】:

    我的自定义插件使用以下代码运行良好。在这个例子中,命名空间不仅用在插件中,还用在继承插件的类中。

    插件的标头---可以在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) {}
    }; 
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-06
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多