2013-05-14 44 views
0

我做了一个自定义小部件“DuwagWidget”和自定义小部件插件“DuwagWidgetPlugin”,它可以被拖拽&在qt设计器中放下来创建我的duwag.ui文件。QT UIC不会自动附加自定义小部件的标头

但是,当我尝试编译我的程序时,ui_duwag.h是从QT用户界面编译器生成的,但在此自动生成的文件中,uic不包含我需要创建的“DuwagWidget.h”自定义小部件类。

DuwagWidgetPlugin(从QT中的接口派生来创建CustomWidgets)只是DuwagWidget的工厂类。

下面是从DuwagWidgetPlugin代码:^

#include <DuwagWidgetPlugin.h> 
    #include <QtPlugin> 
    #include <qwidget.h> 
    #include <MTBFWidget.h> 


    DuwagWidgetPlugin::DuwagWidgetPlugin(QObject *parent) : QObject(parent) { 
     initialized = false; 
    } 

    void DuwagWidgetPlugin::initialize(QDesignerFormEditorInterface * /* core */) { 

     if (initialized) 
      return; 
     initialized = true; 
    } 

    bool DuwagWidgetPlugin::isInitialized() const { 
     return initialized; 
    } 

    QWidget *DuwagWidgetPlugin::createWidget(QWidget *parent) { 
     return new DuwagWidget(parent); 
    } 

    QString DuwagWidgetPlugin::name() const { 
     return "DuwagWidget"; 
    } 

    QString DuwagWidgetPlugin::group() const { 
     return "duwagplugin"; 
    } 

    QIcon DuwagWidgetPlugin::icon() const { 
     return QIcon(); 
    } 

    QString DuwagWidgetPlugin::toolTip() const { 
     return "The duwag control panel"; 
    } 

    QString DuwagWidgetPlugin::whatsThis() const { 
     return "The duwag Control panel"; 
    } 

    bool DuwagWidgetPlugin::isContainer() const { 
     return false; 
    } 

    QString DuwagWidgetPlugin::domXml() const { 
     return "<widget class=\"DuwagWidget\" name=\"DuwagWidget\">\n" 
        " <property name=\"geometry\">\n" 
       " <rect>\n" 
       " <x>0</x>\n" 
       " <y>0</y>\n" 
       " <width>100</width>\n" 
       " <height>100</height>\n" 
       " </rect>\n" 
       " </property>\n" 
       " <property name=\"toolTip\" >\n" 
       " <string>The MTBF Control panel</string>\n" 
       " </property>\n" 
       " <property name=\"whatsThis\" >\n" 
       " <string>The MTBF Control panel.</string>\n" 
       " </property>\n" 
       "</widget>\n"; 
    } 

    QString DuwagWidgetPlugin::includeFile() const { 
     return "DuwagWidget.h"; 
    } 

    Q_EXPORT_PLUGIN2(duwagplugin, DuwagWidgetPlugin) 

所以,问题是,在生成的头文件,它不能使一个自定义窗口小部件“DuwagWidget”,因为它不知道它是什么..

+0

我解决了这个问题,我添加了一些东西到我的cmake ..我错过了include目录,所以如果有人使用CMAKE并且有同样的问题,请将它添加到你的cmake中:include_directories(INCLUDEPATH) – Amazonasmann 2013-05-14 12:50:03

回答

0

我在QtDesigner .ui文件中包含自定义类时遇到了这个问题。 uic确实是还行当您使用“Promote to ..”选项时添加适当标题的工作。

  1. 右键单击布局中的任何小部件。
  2. 选择“升级为..”。
  3. 选择基类并键入升级类“NewClass”的名称。它会自动将#include "NewClass.h"添加到文件“ui_yourclass.h”中。

不幸的是,这将创建冗余包括警告,当另一名设计师的文件访问相同的自定义类和两个“ui_yourclass.h”文件是从相同的标题包括在内。此外,需要推广一个小部件,这使得您必须在您的设计器布局文件中创建并初始化该类的一个实例。

我读过的另一种方法是进入工具>表单编辑器>表单设置,并在标题为“包含提示”的章节中添加“NewClass.h”。但我从来没有这样做过。