QT UIC не добавя автоматично заглавките за персонализирани джаджи

Направих персонализирана джаджа „DuwagWidget“ и персонализирана джаджа „DuwagWidgetPlugin“, която може да бъде плъзгана и пускана в qt дизайнера, за да създам моя файл duwag.ui.

Въпреки това, когато се опитвам да компилирам програмата си, 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“, защото не знае какво представлява.


person Amazonasmann    schedule 14.05.2013    source източник
comment
Реших този проблем, като добавих нещо към моя cmake..пропуснах директорията за включване, така че ако някой използва CMAKE и има същия проблем, добавете това към вашия cmake: include_directories(INCLUDEPATH)   -  person Amazonasmann    schedule 14.05.2013


Отговори (1)


Имах този проблем, когато включвах персонализирани класове в QtDesigner .ui файл. uic се справя добре с добавянето на подходящите заглавки, когато използвате опцията „Повишаване до...“.

  1. Щракнете с десния бутон върху която и да е джаджа във вашето оформление.
  2. Изберете „Повишаване до...“.
  3. Изберете базовия клас и въведете името на повишения клас „NewClass“. Той автоматично добавя #include "NewClass.h" към файла "ui_yourclass.h".

За съжаление, това създава излишни предупреждения за включване, когато друг файл на дизайнер има достъп до същия персонализиран клас и двата файла "ui_yourclass.h" са включени от една и съща заглавка. Също така, необходимостта от популяризиране на джаджа прави задължително да създадете и инициализирате един екземпляр от този клас във вашия файл за оформление на дизайнера.

Друг начин, за който съм чел, е да отидете на Инструменти > Редактор на формуляри > Настройки на формуляр и да добавите „NewClass.h” в секциите, озаглавени „Включване на съвети”. Но никога не съм го правил по този начин.

person buster    schedule 14.05.2013