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

я сделал собственный виджет «DuwagWidget» и плагин для пользовательских виджетов «DuwagWidgetPlugin», который можно перетаскивать&Зашёл в QT Designer для создания моего файла 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», потому что он не знает, что это такое ..

0

Решение

У меня была эта проблема при включении пользовательских классов в .ui-файл QtDesigner. uic делает Хорошо работа по добавлению соответствующих заголовков при использовании опции «Повышать до ..».

  1. Щелкните правой кнопкой мыши на любом виджете в вашем макете.
  2. Выберите «Повышать до ..».
  3. Выберите базовый класс и введите имя повышенного класса «NewClass». Это автоматически добавляет #include "NewClass.h" в файл «ui_yourclass.h».

К сожалению, это создает избыточные предупреждения о включении, когда другой файл конструктора обращается к тому же пользовательскому классу, и оба файла «ui_yourclass.h» включены из одного и того же заголовка. Кроме того, необходимость продвижения виджета делает обязательным создание и инициализацию одного экземпляра этого класса в файле макета дизайнера.

Другой способ, о котором я читал, — это перейти в Инструменты> Редактор форм> Настройки формы и добавить «NewClass.h» в разделы, озаглавленные «Включить подсказки». Но я никогда не делал это таким образом.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]